问题描述
我有菜单表,我在其中存储了所有菜单,并希望在其父菜单下一次性显示所有菜单。为此,我正在组织一个可以在视图文件中使用的数组。
Array
(
[0] => Array
(
[id] => 1
[parent_menu_id] => 1
[tbl_name] => jobs
[menu_name] => Create Jobs
)
[1] => Array
(
[id] => 2
[parent_menu_id] => 1
[tbl_name] => jobs
[menu_name] => Show Jobs
)
[3] => Array
(
[id] => 4
[parent_menu_id] => 4
[tbl_name] => customers
[menu_name] => Create Customers
)
[4] => Array
(
[id] => 5
[parent_menu_id] => 4
[tbl_name] => Customers
[menu_name] => Show Customers
)
)
我想要实现的格式是这样的。
Array
(
[0] => Array
(
[tbl_name] => jobs
[0] => Array
(
[menu_name] => Create Jobs
[route] => jobs.create
)
[1] => Array
(
[menu_name] => Show Jobs
[route] => jobs.assigned_jobs
)
[2] => Array
(
[menu_name] => Show All Jobs
[route] => jobs.index
)
)
[1] => Array
(
[tbl_name] => customers
[0] => Array
(
[menu_name] => Create Customers
[route] => customers.create
)
[1] => Array
(
[menu_name] => Show Customers
[route] => customers.show
)
)
)
我面临的唯一问题是它重复表名 [tbl_name] => jobs
,即使我在循环中取消了这个设置,你可以在我的代码中看到。
Array
(
[0] => Array
(
[tbl_name] => jobs
[0] => Array
(
[menu_name] => Create Jobs
[route] => jobs.create
)
[1] => Array
(
[menu_name] => Show Jobs
[route] => jobs.assigned_jobs
)
[2] => Array
(
[menu_name] => Show All Jobs
[route] => jobs.index
)
)
[1] => Array
(
[tbl_name] => jobs
)
[2] => Array
(
[tbl_name] => jobs
)
[3] => Array
(
[tbl_name] => customers
[0] => Array
(
[menu_name] => Create Customers
[route] => customers.create
)
[1] => Array
(
[menu_name] => Show Customers
[route] => customers.show
)
)
[4] => Array
(
[tbl_name] => Customers
)
)
$rec = menu::all();
$rec = $rec->toArray();
$results = [];
$results1 = [];
foreach ($rec as $key => $value)
{
$results['tbl_name'] = $value['tbl_name'];
foreach ($rec as $kk => $vv)
{
if($vv['parent_menu_id'] == $value['id'])
{
$results[] = ['menu_name' => $vv['menu_name'],'route' => $vv['route']];
unset($rec[$kk]);
}
}
array_values($rec);
$results1[] = $results;
$results = [];
}
解决方法
我昨晚修好了
public function sidebar_menu()
{
$rec = menu::all();
$rec = $rec->toArray();
$res1 = [];
$res2 = [];
foreach ($rec as $key => $value)
{
foreach ($rec as $kk => $vv)
{
if($vv['parent_menu_id'] == $value['id'])
{
$res1['tbl_name'] = $value['tbl_name'];
$res1[] = ['menu_name' => $vv['menu_name'],'route' => $vv['route']];
}
}
if(!empty($res1))
{
$res2[] = $res1;
$res1 = [];
}
}
return $res2;
}