1

私は配列$mainArrayの配列を持っており、値のないキーをvaveする配列を削除/設定解除したいと考えています。

ここに私の配列があります:

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ちょっとそこだけnullを残してのナットim

この配列は次のようになります。

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

PHP を使用unset()して、配列のキー/値の設定を解除します。

このリンクの詳細情報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 に答える