PHP - 从数组中删除空值[重复]

Posted

技术标签:

【中文标题】PHP - 从数组中删除空值[重复]【英文标题】:PHP - remove empty values from array [duplicate] 【发布时间】:2013-07-25 23:39:39 【问题描述】:

当前数组:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
        [name3] => Array (
            [0] =>
        )
) 

想要的数组:

Array (
    [name] => Array (
        [name1] => Array (
            [0] => some value1
        )
        [name2] => Array (
            [0] => some value2
        )
) 

由于name3[0] 不包含任何值,因此需要将其删除。 根据我阅读的内容,我应该为此使用array_filter,但我无法让它工作。

【问题讨论】:

为什么你的数据结构是这样的?为什么不简单的$names = [['name' => 'Jon'], ...] 简单解决方案:***.com/a/66004034/7186739 【参考方案1】:

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

$array = array_filter($array, function($item)  return !empty($item[0]); );

请注意empty 不是很挑剔:它会导致删除任何[0] 子元素为空字符串、falsenull0"0" 的项目--它还将删除根本没有 [0] 子元素的项目。如果您需要更有针对性的手术,则需要对测试进行微调。

【讨论】:

$array 在您的示例中需要为 $array['name'] 如果使用 OP 的原始数组 @AlexP:当然。不过,我不确定这是否值得编辑。【参考方案2】:

可以使用递归函数来完成:

$arr = array('test', array('',0,'test'), array('',''));

print_r(clean_array($arr));

function clean_array($array, $isRepeat = false) 
    foreach ($array as $key => $value) 
        if ($value === null || $value === '')  unset($array[$key]); 
        else if (is_array($value)) 
            if (empty($value))  unset($array[$key]); 
            else $array[$key] = clean_array($value);
        
    
    if (!$isRepeat) 
        $array = clean_array($array,true);
    
    return $array;

【讨论】:

$isRepeat 标志的意义何在?还添加一个 trim($value) 来比较 trim($value) === '' 可能很有用。【参考方案3】:

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

//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;

我已经在这个例子上测试过了,不管数组有多深,它都可以工作:

$array = array(
    'name' => array(
        'name1' => array(0 => 1),
        'name2' => array(0 => 3, 1 => array(5 => 0, 1 => 5)),
        'name3' => array(0 => '')
    )
);

希望这会有所帮助:)

【讨论】:

以上是关于PHP - 从数组中删除空值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php 删除数组重复的值

EXCEL函数去除数组中的0值和空值

PHP 删除数组中的空值

如何从 PHP 中的数组中删除重复值

如何从 PHP 中的多维数组中删除重复值

PHP 在PHP中从数组中删除重复的元素