删除不同数组维度之间的重复项
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();
我在数据库中有一个带有导航栏菜单项的 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();