为什么PHP在添加数组键值对时要求键变量使用双引号?

为什么PHP在添加数组键值对时要求键变量使用双引号?,php,Php,为什么PHP在添加数组键值对时要求键变量使用双引号 foreach($coreXml->Environment as $Environment) { $env = $Environment->Name; $envArr["$env"] ="test"; } 在这个循环中,如果我不在$env周围使用双引号或单引号,它将中断代码,并出现错误“非法偏移类型”。你知道为什么吗?谢谢 我猜$env是null或对象。如果为空,则案例$envArr[“”]将是$envArr[“$

为什么PHP在添加数组键值对时要求键变量使用双引号

foreach($coreXml->Environment as $Environment) {
    $env = $Environment->Name;
    $envArr["$env"] ="test";
}

在这个循环中,如果我不在$env周围使用双引号或单引号,它将中断代码,并出现错误“非法偏移类型”。你知道为什么吗?谢谢

我猜$env是null或对象。如果为空,则案例
$envArr[“”]
将是
$envArr[“$env”]
的结果,使用空字符串索引是完全正确的。

请查看手册中的相关信息。当您将变量放在双引号内时,它们的值将被插值。当您将变量放在单引号内时,它们将不会被插值。下面是在索引“$env”处加载数组的实际操作:

$envArray['$env']
您不需要双引号<代码>$envArr[$env]是完全合法的语法。
$envArr['$env']
将创建文本键
'$env'
,这不是您想要的

但是,如果
$env
不是字符串或整数,而是对象或
null
,则会收到非法偏移通知。使用
“$env”
将变量插入字符串会强制将变量转换为字符串,从而避免了该问题。但问题是,您试图使用非字符串作为数组偏移量,因此错误消息是完全合理且可取的

我猜您使用的是SimpleXML,
$env
是一个
SimpleXML
对象。那么,您应该使用此选项:

$envArr[(string)$env]
// or
$envArr[$env->__toString()]

这与将变量用双引号括起来基本相同,它强制进行字符串转换,但在这种情况下,它是显式的,而不是一个谜。

除非$env为空,否则任何引号的功能都不应与“$env”相同,为什么在您的情况下需要引号?@这是问题的本质所在。谢谢大家的输入。根据下面的答案,$env之间出现的问题似乎是字符串而不是数字。这是SimpleXML问题,您必须将值强制转换为字符串,否则您将获得一个对象。deceze捕捉得很好。如果他在双引号内抛出一个对象,肯定会这样。示例中的代码不会导致错误,也不是问题中的代码。问题是:为什么PHP在添加数组键值对时要求键变量使用双引号?答:没有,这是我的解释。是的,别担心,我现在明白了。他需要随机应变。