Arrays PHP7抛出;非法字符串偏移量“;执行$array[$i][';string';]=>';foo';

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中执行这样的操作时,它会失败,并出现以下错误: 非法字符串偏移量“

在较旧的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)
$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)