检查数组是否有一个或多个空键而不是删除父数组

时间:2018-01-30 11:18:57

标签: php arrays

我有一个多维数组(键 - 值),并且没有设置某些值,在这种情况下为空,如果是这样,必须从主数组中删除父数组。

我构建的代码只删除空键。

在我的例子中,IT& ES语言翻译键为空,因此我们需要删除此父数组。

$results = $arr =array(
    [16] => Array
        (
            [0] => Array
                (
                    [language] => de
                    [translation] => blog/beer
                )

            [1] => Array
                (
                    [language] => en
                    [translation] => blog/some-slug-yeah
                )

            [2] => Array
                (
                    [language] => es
                    [translation] => 
                )

            [3] => Array
                (
                    [language] => fr
                    [translation] => blog/paris-big-city
                )

            [4] => Array
                (
                    [language] => it
                    [translation] =>
                )

            [5] => Array
                (
                    [language] => nl
                    [translation] => blog/nederlands-slug
                )

        )

        [...]//more
)

删除键的功能。

        function array_filter_recursive($input){
            foreach ($input as &$value){
                if (is_array($value)){
                    $value = array_filter_recursive($value);
                }
            }
            return array_filter($input);
        }

        $results  = array_filter_recursive( $results );

2 个答案:

答案 0 :(得分:1)

如果数组总是有2个级别,则不需要递归。

 function array_filter_recursive($input){
        foreach ($input as &$value){
            $value = array_filter($value, function($x) { return !empty($x['translation']); });
        }
        return $input;
    }

demo

答案 1 :(得分:0)

如果你的结构总是这样:

$arr = (
        [0] => Array
            (
                [language] => de
                [translation] => blog/beer
            )

        [1] => Array
            (
                [language] => en
                [translation] => blog/some-slug-yeah
            )

你可以这样做:

for($i = 0; $i < count($arr); $i++}
    if(!isset($arr[$i]["translation"]){
        unset($arr[$i])
    }
}

//re-index thee array;
$arr = array_values($arr);