arrays - PHP7 执行 $array[$i] "illegal string offset"] => ['string' 时抛出 'foo'

标签 arrays php-7

在较旧的 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 是一个字符串数组。假设 $i0,那么我们现在就有 'foo'

那么,

$arr[$i]['string'] 是字符串中的一项,在本例中为 'foo'。字符串仅具有编号的字符偏移量(在本例中它们为 012)。 'string' 不是整数,因此它不是字符偏移量,并且您会收到错误。

关于arrays - PHP7 执行 $array[$i] "illegal string offset"] => ['string' 时抛出 'foo',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431474/

相关文章:

javascript - hackerrank 循环数组旋转由于 Javascript 超时而终止

javascript - 将数字(即 5)转换为数组的长度

linux - 在 Amazon EC2 中从 php 5.3 和 apache 2.2 升级到 php 7 和 apache 2.4

php - 将 cakephp 2.6 升级到 2.8 以使用 php 7

arrays - Swift - 动态结构数组

ios - 如何将 "contains"与两个对象数组一起使用

php - 有没有像 PHP 一样的 JavaScript 函数来序列化和反序列化数组?

PHP 7 用户 session 问题 - 无法初始化存储模块

PHP 7 ZipArchive::OVERWRITE 不工作

如果未启用 mysqli,PHP 不会抛出异常