为什么我的 PHP 脚本中似乎忽略了 `+=` 运算符?

为什么我的 PHP 脚本中似乎忽略了 `+=` 运算符?

抱歉问错了类别。如果我真的可以的话,我会直接在 SO 中发帖:https://meta.stackexchange.com/questions/346772/i-dont-seem-to-be-able-to-register-a-stack-exchange-account请随意移动它。

工作代码

$rows =
[
    [ 'a', '1' ],
    [ 'b', '2' ],
    [ 'c', '3' ]
];
var_dump($rows);

良好的输出

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "b"
    [1]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "3"
  }
}

无效代码

$rows = [];
$rows += [ 'a', '1' ];
$rows += [ 'b', '2' ];
$rows += [ 'c', '3' ];
var_dump($rows);

输出错误

array(2) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "1"
}

我也尝试过$rows .= ...,但是同样不起作用。

我不能“只使用第一个版本”,因为在实际脚本中,它并不是全部定义在同一个地方;它是在大型脚本中的各种循环和内容中生成的。这就是为什么我需要以上述方式“添加到行数组”,我实际上认为我过去这样做没有问题。显然不是?

答案1

“+=”运算符可对两个数组进行并集,如果并集的两个数组中均存在索引,则左侧数组的索引优先。请参阅PHP 手册:数组运算符。我来解释一下:

$rows = [];  
$rows += [ 'a', '1' ];

由于 $rows 为空,它现在包含 [ 0 => 'a', 1 => '1' ]

$行+ = ['b','2'];

因为 [ 0 => 'a', 1 => '1' ] 和 [ 0 => 'b', 1 => '2' ] 的并集是 [ 0 => 'a', 1 => '1' ],所以 $rows 保持不变。

$rows += [ 'c', '3' ];

同上。

我可以向您展示如何获得所需的结果:

$rows = [];
$rows[] = [ 'a', '1' ];
$rows[] = [ 'b', '2' ];
$rows[] = [ 'c', '3' ];
var_dump($rows);

这使

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "b"
    [1]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "3"
  }
}

相关内容