在较旧的 PHP 版本上,我可以执行以下操作。
$arr = ['foo', 'bar']; var_dump($arr); foreach ($arr as $i => $v) { $arr[$i]['string'] = 'baz'; }
现在,当我在 PHP7 中执行此类操作时,它失败并出现以下错误:
Illegal string offset 'string' [sample.php, line 4]
这是为什么?为什么我不能再这样做了?我已经找到了很多关于 PHP7 中类型转换的答案,它不再那么优雅了,所以我怀疑它与此有关,但我在网上找不到我的答案。我错过了什么吗?
第 2 行的 var_dump 结果
array (size=2) 0 => string 'boo' (length=3) 1 => string 'bar' (length=3)
在 foreach 之后我期待以下结果
array (size=2) 'foo' => array (size=1) 'string' => string 'baz' (length=3) 'bar' => array (size=1) 'string' => string 'baz' (length=3)
最佳答案
$arr[$i]['string'] = 'baz';
未分配给您认为的内容。逐步进行:
$arr[$i]
是 $arr
中的一项。 $arr
是一个字符串数组。假设 $i
是 0
,那么我们现在就有 'foo'
。
$arr[$i]['string']
是字符串中的一项,在本例中为 'foo'
。字符串仅具有编号的字符偏移量(在本例中它们为 0
、1
和 2
)。 'string'
不是整数,因此它不是字符偏移量,并且您会收到错误。
关于arrays - PHP7 执行 $array[$i] "illegal string offset"] => ['string' 时抛出 'foo',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431474/