代码之家  ›  专栏  ›  技术社区  ›  Hula Hula

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

  •  0
  • Hula Hula  · 技术社区  · 6 年前

    我在数据库中有一个带有导航栏菜单项的表,该表与自身有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 回复  |  直到 6 年前
        1
  •  1
  •   AddWeb Solution Pvt Ltd    6 年前

    您应该尝试下面的查询。

    \App\Menu::where('id_parent', '=', null)->with(['childs'])->get();
    
        2
  •  0
  •   Benji    6 年前

    使用此一次。。。。。。。我想这对你有帮助

    \App\Menu::where('id_parent', '=', null)->with(['childs'])->get();
    
        3
  •  0
  •   Yassine Beloued    6 年前

    他会亵渎 / url,如果他过滤空值 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