1
请考虑一下测试:投下的foreach PHP数组不通过引用传递变量
$data=[["id"=>1,"text"=>"One"],["id"=>2,"text"=>"Two"]];
foreach((array)$data as &$iter)
$iter["append"]=true;
print_r($data);
这是输出
Array
(
[0] => Array
(
[id] => 1
[text] => One
)
[1] => Array
(
[id] => 2
[text] => Two
)
)
我想ITER一个数组,并添加里面的另一个关键关联数组,这就是为什么$ iter被ref传递的原因。 我在“foreach”中设置了强制转换,以确保通过foreach语句可以接受没有错误的空/空变量。
正如你在输出中看到的那样,foreach不会追加值,但是如果我删除了它的工程。
foreach($data as &$iter)
$iter["append"]=true;
print_r($data);
这是(右)输出
Array
(
[0] => Array
(
[id] => 1
[text] => One
[append] => 1
)
[1] => Array
(
[id] => 2
[text] => Two
[append] => 1
)
)
我解决了一个单独的命令在foreach外铸造,但我的问题是:
这是一个错误?
此测试在PHP版本5.6.14(Apache的2.4窗口-10)
铸造值可以是与变量内部值不同的值。所以,如果它*会工作,它会隐含分配:'$变量=(数组)$变量;'。 – Rizier123
好的,但不同的值意味着不同的参考? – Tobia
对于数组是的。 –