删除不同数组维度之间的重复项

时间:2018-03-24 10:30:16

标签: php mysql sql laravel laravel-5.4

我在数据库中有一个带有导航栏菜单项的表,这个表与自身有1xN的关系,我正在检索数据(如:\App\Menu::with(['childs'])->get()):

array(
    array(
        'id' => 1,
        'id_parent' => NULL,
        'url' => '/',
        'childs' => array ()
    ),
    array(
        'id' => 2,
        'id_parent' => NULL,
        'url' => '/blog',
        'childs' => array (
            array(
                'id' => 3,
                'id_parent' => 2,
                'url' => 'blog/kitchen',
                'childs' => array(
                    array(
                        'id' => 4,
                        'id_parent' => 3,
                        'url' => 'blog/kitchen/salads',
                        'childs' => array()
                    ),
                    array(
                        'id' => 5,
                        'id_parent' => 3,
                        'url' => 'blog/kitchen/soups',
                        'childs' => array()
                    ),
                )
            ),
        )
    ), 
    array(
        'id' => 3,
        'id_parent' => 2,
        'url' => '/blog/kitchen',
        'childs' => array()
    ),
    array(
        'id' => 4,
        'id_parent' => 3,
        'url' => 'blog/kitchen/salads',
        'childs' => array()
    ),
    array(
        'id' => 5,
        'id_parent' => 3,
        'url' => 'blog/kitchen/soups',
        'childs' => array()
    ),
);

我需要什么:

array(
    array(
        'id' => 1,
        'id_parent' => NULL,
        'url' => '/',
        'childs' => array ()
    ),
    array(
        'id' => 2,
        'id_parent' => NULL,
        'url' => '/blog',
        'childs' => array (
            array(
                'id' => 3,
                'id_parent' => 2,
                'url' => 'blog/kitchen',
                'childs' => array(
                    array(
                        'id' => 4,
                        'id_parent' => 3,
                        'url' => 'blog/kitchen/salads',
                        'childs' => array()
                    ),
                    array(
                        'id' => 5,
                        'id_parent' => 3,
                        'url' => 'blog/kitchen/soups',
                        'childs' => array()
                    ),
                )
            ),
        )
    ),
);

如果有更简单的方法,比如; SELECT直接在数据库中它会很棒,如果没有,只需用PHP从外层删除内部项即可。

3 个答案:

答案 0 :(得分:1)

您应该尝试以下查询。

\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();

答案 1 :(得分:0)

如果他过滤掉/

,他会删除parent_id网址

以下是仅使用PHP

的解决方案示例
// an empty array
$arr = array();
// data you import from the database
$array = \App\Menu::where('id_parent', '=', null)
                   ->with(['childs'])->toArray();

// populate the empty array
$arr[] = array_shift($array);
$arr[] = array_shift($array);

$array变量包含最后3个不需要的事件,而$arr变量包含您想要的值。

但我不是建议你,因为你可以用另一种方式使用Collections

答案 2 :(得分:0)

使用这一次.......我认为这会对你有帮助

\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();