如何在php中取消设置空数组?

Posted

技术标签:

【中文标题】如何在php中取消设置空数组?【英文标题】:how to unset empty arrays in php? 【发布时间】:2012-04-06 16:01:18 【问题描述】:

我有一个数组$mainArray,我想删除/取消设置没有值的键的数组。

这是我的数组:

Array
(
[0] => Array
    (
        [msg_id] => 203
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 
                    )
            )
    )
[1] => Array
    (
        [msg_id] => 202
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 196
                    )
                [1] => Array
                    (
                        [com_id] => 197
                    )
                [2] => Array
                    (
                        [com_id] => 
                    )
            )
    )
[2] => Array
    (
        [msg_id] => 201
        [comment] => Array
            (
                [0] => Array
                    (
                        [com_id] => 198
                    )
                [1] => Array
                    (
                        [com_id] => 
                    )
            )
    )
)

在这种情况下,我想查看 comment 数组数组,看看它们中是否有任何空值。如果所有子数组都为空,最好的情况是完全删除 comment 数组。

离开 comment 嘿,只是空

这个数组应该变成:

Array
(
    [0] => Array
        (
            [msg_id] => 203
        )
    [1] => Array
        (
            [msg_id] => 202
            [comment] => Array
                (
                    [0] => Array
                        (
                            [com_id] => 196
                        )
                    [1] => Array
                        (
                            [com_id] => 197
                        )
                )
        )
    [2] => Array
        (
            [msg_id] => 201
        )
)

关于如何进行的任何想法?

谢谢。

【问题讨论】:

【参考方案1】:

使用 phpunset() 取消设置任何数组键/值。

更多信息在这个链接http://in3.php.net/unset

在你的情况下,代码可以,(我没有测试过。但如果你有任何问题,请告诉我,我可以解决它)

function unsetCommentFromArray($mainArray) 
    foreach($mainArray as $key => $value) 
        foreach($value['comment'] as $k => $v) 
            if(empty($v['com_id'])) 
                unset($mainArray[$key]['comment'][$k]);
            
           
    
    return $mainArray;

【讨论】:

【参考方案2】:
$array = array_map(function ($i) 
    $i['comment'] = array_filter($i['comment'], function ($c)  return $c['com_id']; );
    return array_filter($i);
, $array);

需要 PHP 5.3 或更高版本。

【讨论】:

【参考方案3】:

array_filter() 是您所追求的。特别是递归版本。以下内容来自a comment on the PHP Doc:.

function array_filter_recursive($array, $callback = null) 
    foreach ($array as $key => & $value) 
        if (is_array($value)) 
            $value = array_filter_recursive($value, $callback);
        
        else 
            if ( ! is_null($callback)) 
                if ( ! $callback($value)) 
                    unset($array[$key]);
                
            
            else 
                if ( ! (bool) $value) 
                    unset($array[$key]);
                
            
        
    
    unset($value);

    return $array;

【讨论】:

以上是关于如何在php中取消设置空数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中取消设置数组元素匹配索引?

如何在php中通过空键取消设置数组

如何从 PHP 数组中取消设置数字索引元素?

如何取消设置 PHP 中作为数组的 _SESSION 变量

我如何在php中取消设置多个键

如何在 PHP 中取消设置 cookie?