抱歉问错了类别。如果我真的可以的话,我会直接在 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"
}
}