如何从多维数组中删除空数组?

时间:2018-01-31 06:37:29

标签: php arrays

我有一个像:

这样的数组
Array
(
    [0] => Array
        (
            [id] => 1367
            [category_value] => 15
            [isepisode] => 0
            [title] => hello world
        )

    [1] => Array
        (
            [id] => 9892
            [category_value] => 
            [isepisode] => 0
            [title] => 
        )
    [2] => Array
        (
            [id] => 9895
            [category_value] => 
            [isepisode] => 0
            [title] => Bla Bla
        )
)

我想删除那些title为空的数组。

这是我的代码:

$res = array_map('array_filter', $data);
print_r(array_filter($res)); exit;

上面的代码只删除那些数组值为空。但我想删除标题为null的整个数组。我的输出应该是:

Array
(
    [0] => Array
        (
            [id] => 1367
            [category_value] => 15
            [isepisode] => 0
            [title] => hello world
        )
    [2] => Array
        (
            [id] => 9895
            [category_value] => 
            [isepisode] => 0
            [title] => Bla Bla
        )
)

注意:我有数千个阵列。如果放在foreach这将需要时间来执行。有没有最简单的方法呢?

4 个答案:

答案 0 :(得分:2)

正确array_filter()方法:

$result = array_filter($arr, function($a){ return $a['title']; });

答案 1 :(得分:1)

您可以在array_filter中使用回调参数。例如:

$result = array_filter($data, function($entry) {
    return ! empty($entry['title']);
});

print_r($result);

更好的是,如果您查看文档的user contributed notes部分,则可以看到:

  

如果您希望快速删除NULLFALSE和空字符串(""),但保留0(零)的值,可以使用标准的php函数strlen作为回调函数:

     

e.g:

<?php

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result = array_filter( $array, 'strlen' );

答案 2 :(得分:0)

您可以将array_filter()与实现过滤规则的自定义回调函数一起使用:

$res = array_filter
    $data,
    function (array $item) {
        return strlen($item['title']);
    }
);

对于0为空字符串(或title)的项,回调函数返回NULLarray_filter()从提供的数组中删除这些条目。

答案 3 :(得分:0)

如果您想使用foreach()执行此操作,请尝试以下操作:

$array = array(array('id'=>1,'title'=>'john'),array('id'=>2,'title'=>''),array('id'=>3,'title'=>'mike'));
foreach($array as $key => $val){
    if($val['title']==''){
        unset($array[$key]);
    }
}