使用PHP从值中删除多维索引数组中的元素

时间:2015-06-10 09:11:35

标签: php arrays multidimensional-array

我有阵列:

Array
(
    [5] => Array
        (
            [0] => 19
            [1] => 18
        )

    [6] => Array
        (
            [0] => 28
        )

)

我尝试使用我的函数删除元素:

function removeElementWithValue($obj, $delete_value){

    if (!empty($obj->field)) {
         foreach($obj->field as $key =>$value){
            if (!empty($value)) {
                foreach($value as $k=>$v){
                    if($v == $delete_value){
                       $obj->field[$key][$k] = '';
                    }
                }
            }
         }
    }
    return urldecode(http_build_query($obj->field));
}

echo removeElementWithValue($request, '19');

在上面的操作之后,我有: 5 [0] =& 5 [1] = 18& 6 [0] = 28; //正确!!!

echo removeElementWithValue($request, '18');

上面的操作后我有: 5 [0] =& 5 [1] =& 6 [0] = 28; //错误???

但是我在第二次操作后的预期结果是:

5[0]=19&5[1]=&6[0]=28;

我的错误在哪里? 谢谢!

2 个答案:

答案 0 :(得分:1)

使用array_walk_recursive查找和更改值

$arr = Array (
    5 => Array ( 0 => 19, 1 => 18 ),
    6 => Array ( 0 => 28));

$value = 18;

array_walk_recursive($arr, 
      function (&$item, $key, $v) { if ($item == $v) $item = ''; }, $value);

print_r($arr); 

结果:

Array (
    5 => Array ( 0 => 19, 1 =>  ),
    6 => Array ( 0 => 28));

答案 1 :(得分:0)

更简单的功能可能是..

function removeElementWithValue($ar,$val){

    foreach($ar as $k=>$array){
        //update the original value with a new array
        $new_ar = array_diff_key($array,array_flip(array_keys($array,$val)));
        if($new_ar){
            $ar[$k]=$new_ar;
        }else{
            unset($ar[$k]);//or remove the empty value
        }
    }

    return $ar;
}