在较旧的PHP版本上,我可以执行以下操作。
$arr = ['foo', 'bar']; var_dump($arr); foreach ($arr as $i => $v) { $arr[$i]['string'] = 'baz'; }
现在,当我在PHP7中执行此类操作时,它会因以下错误而失败:
非法字符串偏移'字符串' [sample.php,第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)
答案 0 :(得分:2)
$arr[$i]['string'] = 'baz';
并未指定您认为的内容。一步一步地采取行动:
$arr[$i]
是$arr
中的一项。 $arr
是一个字符串数组。假设$i
为0
,那么我们现在有'foo'
。
$arr[$i]['string']
是字符串中的项目,在本例中为'foo'
。字符串只有编号的字符偏移量(在这种情况下,它们将是0
,1
和2
)。 'string'
不是整数,因此它不是字符偏移量,而且会出错。