PHP - 如何递归删除数组的空条目?

And*_*dré 13 php arrays array-filter

我需要删除多级数组上的空条目.现在我可以删除带有空子数组的条目,但不能删除空数组...混淆,所以我...我认为代码将有助于更好地解释...

<?php

/**
 * 
 * This function remove empty entries on arrays
 * @param array $array
 */
function removeEmptysFromArray($array) {

    $filtered = array_filter($array, 'removeEmptyItems');
    return $filtered;
}

/**
 * 
 * This is a Callback function to use in array_filter()
 * @param array $item
 */
function removeEmptyItems($item) {

    if (is_array($item)) {
        return array_filter($item, 'removeEmptyItems');
    }

    if (!empty($item)) {
        return true;  
    }
}


$raw = array(
    'firstname' => 'Foo',
    'lastname'  => 'Bar',
    'nickname' => '',
    'birthdate' => array( 
        'day'   => '',
        'month' => '',
        'year'  => '',
    ),
    'likes' => array(
        'cars'  => array('Subaru Impreza WRX STi', 'Mitsubishi Evo', 'Nissan GTR'),
        'bikes' => array(),
    ),
);

print_r(removeEmptysFromArray($raw));

?>
Run Code Online (Sandbox Code Playgroud)

好吧,这段代码将删除"昵称","生日",但不删除具有空数组的"自行车".

我的问题是......如何删除"自行车"条目?

最好的祝福,

对不起我的英语不好...

Ale*_*tis 32

试试这段代码:

<?php
function array_remove_empty($haystack)
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            $haystack[$key] = array_remove_empty($haystack[$key]);
        }

        if (empty($haystack[$key])) {
            unset($haystack[$key]);
        }
    }

    return $haystack;
}

$raw = array(
    'firstname' => 'Foo',
    'lastname'  => 'Bar',
    'nickname' => '',
    'birthdate' => array(
        'day'   => '',
        'month' => '',
        'year'  => '',
    ),
    'likes' => array(
        'cars'  => array('Subaru Impreza WRX STi', 'Mitsubishi Evo', 'Nissan GTR'),
        'bikes' => array(),
    ),
);

print_r(array_remove_empty($raw));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,只是用它.一个补充:如果你想删除数组值中的"whitespaced"字符串,那么添加一个小"elseif"子句:if(is_array($ value)){$ haystack [$ key] = array_remove_empty($ haystack [$ key] ]); } elseif(is_string($ haystack [$ key])){$ haystack [$ key] = trim($ value); 那个方式array(array("","))也将返回为空. (2认同)
  • @ThanhTrung,他从array_remove_empty内部调用array_remove_empty。如果他要重命名该函数,将不再有要调用的array_remove_empty函数。如果内部调用是通过分配`$ fn = __FUNCTION__`然后调用$ fn来完成的,则无论该函数的名称如何,它都可以工作。当然,另一种选择是*在重命名函数时要格外小心,并确保已替换所有**正确的函数名出现*。特别是如果您重命名功能以避免名称冲突,则该功能仍将存在时**,但又是完全不同的功能**。 (2认同)