我有一个问题我正在处理我需要遍历2个不同的数组并更改第二个数组中项目的值。由于某种原因,下面的代码将循环遍历两个数组并将值更改为第二个数组但是当我再次从第二个数组中检索值时,它们将被设置回零。任何人都知道这里发生了什么,或者我可能做错了什么?
<?php
$list1 = array( array("item1", 1),
array("item2", 1),
array("item3", 2),
array("item4", 6));
$list2 = array( array("CHF", 0),
array("HF", 0),
array("AMI", 0),
array("COPD", 0),
array("PN", 0),
array("THA", 0),
array("TKA", 0));
foreach( $list1 as $stuff ) {
foreach( $list2 as $val ) {
$val[1] = $val[1] + 1;
}
}
foreach( $list2 as $poo ) {
echo "<br/>" . $poo[0] . " = " . $poo[1];
}
?>
这输出以下
CHF = 0,HF = 0,AMI = 0,COPD = 0,PN = 0,THA = 0,TKA = 0
但我希望它输出的是:
CHF = 1,HF = 1,AMI = 1,COPD = 1,PN = 1,THA = 1,TKA = 1
答案 0 :(得分:2)
您需要在foreach
循环中设置循环值assign-by-reference而不是值,如下所示:
foreach( $list1 as &$stuff ) {
foreach( $list2 as &$val ) {
$val[1] = $val[1] + 1;
}
}
如果按值分配,则表示您正在获取并修改元素的副本,然后将其丢弃。这就是为什么原始阵列不受影响的原因。
答案 1 :(得分:0)
哦,你应该通过引用传递你的第二个数组。只需添加&amp;在第二个foreach循环中的名称。您的变体在阵列副本上运行。此外,有必要重新组织您的代码。刚才它会增加第二个数组中的每个值四次,因为来自内部数组的每个元素的代码将从外部数组的每次迭代运行。