我需要更新PHP数组中的值。每当我为某个项目分配新值时,似乎都没有更新这些值。这是我的代码:
$actions = array(
array('action' => 'Action1', 'value' => '0'),
array('action' => 'Action2', 'value' => '0'),
);
foreach($actions as $item){
if($item['action'] == 'Action1'){
$item['value'] = 20;
}
}
执行此foreach循环后,数组保持不变。所有值都为0。
答案 0 :(得分:3)
当你为每个循环使用a时,你没有更新原始数组。您只是更新循环范围中的$item
var
您需要通过引用传递而不是值
foreach ($actions as &$item) {
}
请注意&
之前的$item
,这会导致您的更改更新原始数组。
答案 1 :(得分:0)
试试这个
foreach($actions as $key => $val){
if($val['action'] == 'Action1'){
$actions[$key]['value'] = 20;
}
}
答案 2 :(得分:0)
您正在修改变量的副本,您想要的是以下之一:
foreach($actions as &$item){ //<== add "&" reference to the $item that now when ever you change it the actions will change
if($item['action'] == 'Action1'){
$item['value'] = 20;
}
}
OR
foreach($actions as $key => $item){
if($item['action'] == 'Action1'){
$actions[$key]['value'] = 20; // directly access $action and modify the value
}
}
答案 3 :(得分:0)
除了上面的答案,你也可以试试这个:
foreach(array_keys($actions) as $key){
$item = &$actions[$key];
if($item['action'] == 'Action1'){
$item['value'] = 20;
}
}
我记得像
这样的方法foreach($actions as &$item)
在某些情况下,可能会导致一些有线问题。我在Drupal遇到过一次,但不记得在哪里。