从php中的三维数组中删除元素

时间:2012-03-01 10:46:43

标签: php

Array
(
    [15,  BBC company] => Array
        (
            [147, IT Dep] => 85
            [150, HR Dep] => Array
                (
                    [58] => employee 1
                    [71] => employee 2
                )

        )

)

我想删除 [58] =>来自数组的员工1 以下是我的代码,但它不起作用。

任何人都可以帮助我吗?非常感谢!

foreach($arr as $key=>$value){

    foreach ($value as $subKey=>$subVal){

        foreach($subVal as $k=>$v){

            if($k==58){

                echo $k;

                unset($subVal[$k]);

            }
        }

    }

}

预期结果

Array
(
    [15,  BBC company] => Array
        (
            [147, IT Dep] => 85
            [150, HR Dep] => Array
                (
                    [71] => employee 2
                )

        )

)

4 个答案:

答案 0 :(得分:1)

Delete an element from an array

unset($myArray[15][150][58]);

where 15 = BBC Company
      150 = HR Dept
      58 = some employee you want fired

在你到达第三个维度之前,你已经知道要去哪里了。你只需要填写它。

另外,你现在正在做的是你在数组的第三维中取消了每个第58个索引值 - 顺便说一下这是错误的。假设您的员工碰巧在IT部门数组中有索引58。您也可以使用当前代码删除他。

答案 1 :(得分:1)

代码必须如下:

foreach($arr as $key=>&$value){
    foreach ($value as $subKey=>&$subVal){    
        foreach($subVal as $k=>&$v){
            if($k==58){
                echo $k;
                unset($subVal[$k]);
            }
        }
    }
}

因为foreach创建了数组的副本,并且您正在取消设置此副本的元素。在上面的代码中,数组作为引用传递

答案 2 :(得分:1)

foreach循环提供的变量是按值而不是引用,因此您无法修改原始变量,并且强制在foreach中使用&强制使用引用。你最好直接使用foreach提供的键而不是它提供的变量。

foreach($arr as $key=>$value){

    foreach ($arr[$key] as $subKey=>$subVal){

        foreach($arr[$key][$subKey] as $k=>$v){

            if($k==58){

                echo $k;

                unset($arr[$key][$subKey][$k]);

            }
        }
    }
}

完全未经测试。

见这里:http://php.net/manual/en/control-structures.foreach.php

答案 3 :(得分:1)

$arr = Array(
       '15,  BBC company' => Array(
                            '147, IT Dep' => 85,
                            '150, HR Dep' => Array(
                                             '58' => 'employee 1',
                                             '71' => 'employee 2'
                                             )
                            )
     );

foreach($arr as $key=>$value){
    foreach ($value as $subKey=>$subVal){
        if(is_array($subVal)):
          foreach($subVal as $k=>$v) {
            if($k==58){
                echo $k;
                echo '<br />';
                print_r($value[$subKey][$k]);
                echo '<br />';
                unset($arr[$key][$subKey][$k]);
            }
          }
        endif;
    }
}
print_r($arr);