You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组键含连字符的取值问题

解决PHP读取带连字符数组键值的问题

这种带连字符的键名在PHP里其实是完全可以正常读取的,你遇到的问题大概率是数组结构定义有误,或者变量本身的问题,我给你一步步排查和解决:

1. 先确认数组的正确定义

你给出的数组写法看起来是PHP风格,但要注意带连字符的键名必须用引号包裹,否则PHP会把它当成常量解析,导致键名异常。正确的数组定义应该是这样:

$the_array = [
    0 => [
        "address" => "0.0.0.0.0",
        "mac-address" => "XX:XX:XX:XX:XX:XX",
        "server" => "0.0.0.0"
    ],
    1 => [
        "address" => "0.0.0.0",
        "mac-address" => "XX:XX:XX:XX:XX:XX",
        "server" => "0.0.0.0"
    ]
];

如果你的数组定义时没给mac-address加引号,PHP会抛出警告,并且自动把它转为字符串'mac-address'(如果没有同名常量的话),但这可能导致后续读取异常。

2. 验证数组结构是否正确

先别着急读取值,先输出整个数组的结构,确认目标键名存在:

// 输出数组详细结构
var_dump($the_array);
// 或者更简洁的输出
print_r($the_array);

查看输出结果里,$the_array[0]下有没有'mac-address'这个键,以及键名的拼写、符号是否完全一致(比如有没有把连字符写成下划线?)。

3. 测试正确的读取方式

如果数组结构没问题,那这两种读取方式都应该生效:

数组方式读取

// 直接用带引号的键名读取
echo $the_array[0]['mac-address'];

转对象后读取

如果转成对象,需要用花括号包裹带特殊字符的属性名:

$item_obj = (object)$the_array[0];
echo $item_obj->{'mac-address'};

4. 排查其他可能的问题

  • 变量作用域:如果$the_array是在函数外部定义的,而你在函数内部读取,需要用global $the_array或者把变量作为参数传入函数。
  • 拼写错误:仔细检查变量名、键名的拼写,比如有没有把mac-address写成macaddress、mac_address,或者$the_array写成$array?
  • 开启错误提示:临时开启PHP的错误报告,看看有没有隐藏的警告或错误:
error_reporting(E_ALL);
ini_set('display_errors', 1);

如果有报错,比如“Undefined index: mac-address”,那说明这个键确实不存在,回到数组定义环节排查。

你可以先按照上面的步骤排查,大概率能找到问题所在~

内容的提问来源于stack exchange,提问作者Foo Hue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:13:15