PHP7抛出"非法字符串偏移"执行$ array [$ i] [' string'] => '富'

时间:2016-11-04 20:49:13

标签: arrays php-7

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

1 个答案:

答案 0 :(得分:2)

$arr[$i]['string'] = 'baz';并未指定您认为的内容。一步一步地采取行动:

$arr[$i]$arr中的一项。 $arr是一个字符串数组。假设$i0,那么我们现在有'foo'

然后,

$arr[$i]['string']是字符串中的项目,在本例中为'foo'。字符串只有编号的字符偏移量(在这种情况下,它们将是012)。 'string'不是整数,因此它不是字符偏移量,而且会出错。