PHP - 从数组中删除空值

Rhy*_*Guy 5 php arrays multidimensional-array

当前数组:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
        [name3] => Array (
            [0] =>
        )
) 
Run Code Online (Sandbox Code Playgroud)

通缉阵列:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
) 
Run Code Online (Sandbox Code Playgroud)

由于name3[0]不包含任何值,因此需要将其删除.从我读到的,我应该使用array_filter它,但我不能让它工作.

Jon*_*Jon 5

您需要提供array_filter一个谓词(函数)来确定[0]每个数组元素的子元素是否为空.所以:

$array = array_filter($array, function($item) { return !empty($item[0]); });
Run Code Online (Sandbox Code Playgroud)

要知道,empty不是很挑剔:它会导致删除其任何项目[0]的子元素是空字符串false,null,0"0"-它也将删除没有的项目[0]子元素都没有.如果您需要更符合手术目标的测试,则需要对测试进行微调.


Ale*_*vic 5

递归函数,它将从输入数组中删除所有空值和空数组:

//clean all empty values from array
function cleanArray($array)
{
    if (is_array($array))
    {
        foreach ($array as $key => $sub_array)
        {
            $result = cleanArray($sub_array);
            if ($result === false)
            {
                unset($array[$key]);
            }
            else
            {
                $array[$key] = $result;
            }
        }
    }

    if (empty($array))
    {
        return false;
    }

    return $array;
}
Run Code Online (Sandbox Code Playgroud)

我已经在这个例子中测试过它,无论数组有多深它都可以工作:

$array = array(
    'name' => array(
        'name1' => array(0 => 1),
        'name2' => array(0 => 3, 1 => array(5 => 0, 1 => 5)),
        'name3' => array(0 => '')
    )
);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)