Arrays PHP7抛出;非法字符串偏移量“;执行$array[$i][';string';]=>';foo';
在较旧的PHP版本上,我可以执行以下操作 $arr = ['foo', 'bar']; var_dump($arr); foreach ($arr as $i => $v) { $arr[$i]['string'] = 'baz'; } $arr=['foo','bar']; var_转储($arr); foreach($arr为$i=>$v){ $arr[$i]['string']='baz'; } 现在,当我在PHP7中执行这样的操作时,它会失败,并出现以下错误: 非法字符串偏移量“string”[sample.php,第4行] 为什么会这样,为什么我不能再这样做了?我已经在PHP7中找到了很多关于打字的答案,它不再那么优雅了,所以我怀疑这与此有关,但我在网上找不到我的答案。我错过什么了吗 第2行的var_转储结果 数组(大小=2) 0=>字符串“boo”(长度=3) 1=>字符串“条”(长度=3) 在这次会议之后,我期待着以下结果 数组(大小=2) ‘foo’=> 数组(大小=1) 'string'=>string'baz'(长度=3) '酒吧'=> 数组(大小=1) 'string'=>string'baz'(长度=3)Arrays PHP7抛出;非法字符串偏移量“;执行$array[$i][';string';]=>';foo';,arrays,php-7,Arrays,Php 7,在较旧的PHP版本上,我可以执行以下操作 $arr = ['foo', 'bar']; var_dump($arr); foreach ($arr as $i => $v) { $arr[$i]['string'] = 'baz'; } $arr=['foo','bar']; var_转储($arr); foreach($arr为$i=>$v){ $arr[$i]['string']='baz'; } 现在,当我在PHP7中执行这样的操作时,它会失败,并出现以下错误: 非法字符串偏移量“
$arr[$i]['string']='baz'代码>未分配给您认为的内容。循序渐进:
$arr[$i]
是$arr
中的一项$arr
是一个字符串数组。假设$i
是0
,那么我们现在有'foo'
$arr[$i]['string']
则是字符串中的一项,在本例中为'foo'
。字符串只有编号的字符偏移量(在这种情况下,它们是0
、1
和2
)<代码>'string'
不是整数,所以它不是字符偏移量,您会得到一个错误。为什么您要执行$arr[$i]['string']='baz'代码>?访问字符串的string
字段似乎根本不符合逻辑。为什么不$arr[$i]=['string'=>'baz']代码>?编辑:仔细观察您的预期输出,我甚至更加困惑。您如何期望数组的值突然变成键?长话短说,这根本不是PHP的工作方式。是不是因为“foo”和“bar”都不是数组,所以不能将元素推入其中?我现在觉得非常愚蠢。我没有访问我认为是的数组类型。所以在m示例中,我重新创建了所发生的事情,但这更加打乱了我的想法。想想@FelixKling所说的话,我的头脑又清醒了。你们中有人能补充一个答案吗。然后我会把它标记为已解决。
array (size=2)
0 => string 'boo' (length=3)
1 => string 'bar' (length=3)
array (size=2)
'foo' =>
array (size=1)
'string' => string 'baz' (length=3)
'bar' =>
array (size=1)
'string' => string 'baz' (length=3)