PHP从具有空值的数组中删除键值对

时间:2015-02-17 16:11:16

标签: php arrays

我发布的数据如下:

array(2) { 
    ["ui"]=> array(1) { 
        ["menu"]=> array(3) { 
            ["button1"]=> string(8) "Press me" 
            ["button2"]=> string(9) "Tickle me"
            ["button3"]=> string(0) ""

        }
    }
    ["messages"]=> array(1) { 
        ["status"]=> array(2) { 
            ["error"]=> string(0) "" 
            ["success"]=> string(0) ""
        }
    }
}

我想删除所有具有空值的键值对,以获得如下结果:

 array(1) { 
    ["ui"]=> array(1) { 
        ["menu"]=> array(2) { 
            ["button1"]=> string(8) "Press me" 
            ["button2"]=> string(9) "Tickle me"
        }
    }
}

所以我实现了这个递归函数:

function clear_empty_array_values($array){
    foreach($array as $key => $value){
        if (is_array($value)){
            clear_empty_array_values($value);  
        }else{
            if (empty($value)){
                unset($array[$key]);
            }  
        }
    }
}

但是当我在我的阵列上调用这个函数时:

clear_empty_array_values($my_array);

我得到与调用方法之前相同的结果。

你能看出出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

要在展示时修改$my_array,您需要传递参考&。然后修改$value中的foreach使用引用&

function clear_empty_array_values(&$array){
    foreach($array as $key => &$value){
        if (is_array($value)){
            clear_empty_array_values($value);
        }
        if(empty($value)) {
            unset($array[$key]);
        }
    }
}

答案 1 :(得分:0)

这样做: function clear_empty_array_values(& $ array)

或者,您必须返回值:

function clear_empty_array_values($array){
    foreach($array as $key => $value){
        if (is_array($value)){
            $array[$key] = clear_empty_array_values($value);  
        }else{
            if (empty($value)){
                unset($array[$key]);
            }  
        }
    }
return $array;
}