【问题标题】:php update value in multidimensional array not by referencephp更新多维数组中的值不是通过引用
【发布时间】:2013-12-17 11:55:12
【问题描述】:

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

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

我试过这样:

$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"
  }
}

我检查了条件是否正确,是的,但是当我进行分配并再次打印数组后,数组没有改变。

有人可以帮我吗?

谢谢

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    这不起作用,因为您正在更改 $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 我尽快接受答案
    【解决方案2】:

    您可以通过引用传递 $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 = '';
                    }                      
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2019-11-28
      • 2013-03-15
      • 2012-09-07
      相关资源
      最近更新 更多