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

Remove duplicates between different array dimensions

我在数据库中有一个带有导航栏菜单项的 table,这个 table 与其自身有 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 从外层中删除内部项就足够了。

您应该尝试以下查询。

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

如果他通过 null parent_id

过滤,他将删除 / url

这是一个仅使用 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

用这个一次......我想这对你有帮助

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