1

私は配列の配列を持っています、

以下に基本的な構造を投稿しました。再帰はどのような深さでもかまいません。

とにかく、私がやりたいのは、配列内のすべてのアイテムをループし、その['item']->data('id')値が等しい場合は$id、ツリーのそのセクションを削除することです。

しかし、これを行う最も効率的な方法がわかりませんか?

これでうまくいくと思いますが、何か足りないのでしょうか?

function removeKey($key, &$categories){
    foreach($categories as $k => $category){
        if($category['item']->data('id') == $key){
            unset($categories[$k]);
            return;
        }
        if(!empty($category['children']))
            removeKey($key, $category['children']);
    }
}

removeKey($id, $categories);

array(
    array(
        'item' => "category Object", //use ->data('id') to get the id!
        'children' => array(
            array(
                'item' => "category Object",
                'children' => array(
                    array(
                        'item' => "category Object",
                        'children' => array()
                    )
                )
            ),
            array(
                'item' => "category Object",
                'children' => array(
                    array(
                        'item' => "category Object",
                        'children' => array()
                    )
                )
            )
        )
    ),
    array(
        'item' => "category Object",
        'children' => array(
            array(
                'item' => "category Object",
                'children' => array(
                    array(
                        'item' => "category Object",
                        'children' => array()
                    )
                )
            ),
            array(
                'item' => "category Object",
                'children' => array(
                    array(
                        'item' => "category Object",
                        'children' => array()
                    )
                )
            )
        )
    )
);
4

3 に答える 3

0

最上位の配列で使用array_filter してから、コールバック関数で各子配列を分析できます。http://www.php.net/manual/en/function.array-filter.phpをご覧ください

于 2012-10-04T13:52:25.870 に答える
0

これを試して

function removeKey($key, &$categories){
    foreach($categories as $category){//y u were using $& 
        if($category['item']->data('id') == $key){
            unset($category);
            return;
        }
        if(!empty($category['children']))
            removeKey($key, $category['children']);
    }
}

removeKey($id, $categories);
于 2012-10-04T13:54:06.033 に答える
0

array_mapまたはarray_filterのいずれかを使用して、各子をトラバースし、目的の子の設定を解除できます。

于 2012-10-04T13:54:53.343 に答える