php更新多维数组中的值不是通过引用

时间:2013-12-17 11:55:12

标签: php arrays multidimensional-array

我知道这是一个类似的问题: Updating a Multidimensional Array in PHP

但我的问题不同:
我有一个多维数组,我想检查其中的值是否等于另一个,如果是更新值。

我试过这样的方式:

$room_id = '1205222__1763659__386572_1';

foreach($cart as $c){
        if($c['item_type'] == 'hotel'){
            foreach($c as $key => $value){
                if(substr($key, 0, 7) == 'room_id'){
                    if($value == $room_id)  {
                        $c[$key] = '';
                    }                      
                }
            }
        }
    }

这是我的数组的一个例子:

array() {
  [0]=>
  array() {
    ["item_type"]=> "hotel"
    ["room_id_0"]=> "1205222__1763659__386572_1"
    ["room_id_1"]=> "1205222__1763659__386572_2"
  },
  [1]=>
  array() {
    ["item_type"]=> "hotel"
    ["room_id_0"]=> "1205222__1763659__386572_3"
    ["room_id_1"]=> "1205222__1763659__386572_4"
  }
}

我已检查条件是否正常并且是,但是当我进行分配并再次打印数组后,数组不会更改。

有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:3)

这将无法正常工作,因为您正在更改$ c,这是数组$ cart的副本。您需要获取第一个数组值的数组键和第二个数组的数组键,然后更新:

试试这个

foreach($cart as $a => $c){
        if($c['item_type'] == 'hotel'){
            foreach($c as $key => $value){
                if(substr($key, 0, 7) == 'room_id'){
                    if($value == $room_id)  {
                        $cart[$a][$key] = '';
                    }                      
                }
            }
        }
    }

答案 1 :(得分:1)

您可以通过引用传递$ c来调用foreach,如下所示:

foreach($cart as &$c){
...

这可以让你改变项目的价值。

为了更进一步,您还可以通过引用传递$ value,然后通过修改$ value来更改其值:

// Notice &$c
foreach($cart as &$c){
    if($c['item_type'] == 'hotel'){
        // Notice &$value
        foreach($c as $key => &$value){
            if(substr($key, 0, 7) == 'room_id'){
                if($value == $room_id)  {
                    // Instead of $c[$key]
                    $value = '';
                }                      
            }
        }
    }
}