1

我有一个数组$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
        )
)

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

谢谢。

4

3 回答 3

2

使用 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;
}
于 2012-03-22T04:24:57.843 回答
2

array_filter()是你所追求的。特别是递归版本。以下内容来自对 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;
}
于 2012-03-22T04:26:46.667 回答
1
$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 或更高版本。

于 2012-03-22T04:41:17.773 回答