仅删除所有值为空的关联数组


Remove only associative array with all values empty

是否可以只删除所有值为空的关联数组?

数据来源:

 Array
(
    [0] => Array
        (
            [name] => foo
            [phone] => 012345
            [email] => 
        )
    [1] => Array
        (
            [name] => bar
            [phone] => 
            [email] => yahoo.com
        )
    [2] => Array
        (
            [name] => 
            [phone] => 
            [email] => 
        )
)

期望输出:

Array
(
    [0] => Array
        (
            [name] => foo
            [phone] => 012345
            [email] => 
        )
    [1] => Array
        (
            [name] => bar
            [phone] => 
            [email] => yahoo.com
        )
)

我试过这个,但不幸的是我会删除数组的所有空值

$_arr = array_filter(array_map('array_filter', $_arr));
Array
(
    [0] => Array
        (
            [name] => foo
            [phone] => 012345
        )
    [1] => Array
        (
            [name] => bar
            [email] => yahoo.com
        )
)

我该怎么做?谢谢

也许是一种更光滑的方式,但是:

$array = array_filter($array, function($a) { return array_filter($a); });

由于array_filter使用truefalse返回过滤器;函数中的array_filter返回一个评估为false的空数组,或者一个评估为true的非空数组,并且主要array_filter基于此进行过滤。

<?php 
$collection = array(
                    "0" => array
                        (
                            'name' => "foo",
                            'phone' => "012345",
                            'email' => ''
                        ),
                    "1" => array
                        (
                            'name' => "bar",
                            'phone' => '',
                            'email' => "yahoo.com",
                        ),
                    "2" => array
                        (
                            'name' => '',
                            'phone' => '',
                            'email' => ''
                        )
                );
foreach($collection as $key=> $entry){
    if(count(array_filter($entry)) == 0){
        unset($collection[$key]);
    }
}
print_r($collection);