Reputation:
print_r($menus); gives the following output:
Array
(
[0] => Array
(
[name] => Politics
[action] => politics
)
[sub_menu2] => Array
(
[0] => Array
(
[name] => submenu2
[action] => politics
)
[1] => Array
(
[name] => submenu3
[action] => sport
)
)
)
My expected filtered array is:
Array
(
[0] => Array
(
[name] => Politics
[action] => politics
[sub_menu2] => Array
(
[0] => Array
(
[name] => submenu2
[action] => politics
)
[1] => Array
(
[name] => submenu3
[action] => sport
)
)
)
)
My code is:
$filteredMenu = array();
$unique = array();
$index = 0;
$index2 = 0;
foreach ($menus as $key => $menu) {
$pm = $menu['Menu']['name'];
if (isset($unique[$pm])) {
if (!empty($menu['sub_menus']['name'])) {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['sub_menu'][] = $temp;
}
if(!empty($menu['sub_sub_menus']['name'])){
$temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['sub_menu']['sub_menu2'][] = $temp;
}
} else {
if ($key != 0)
$index++;
$unique[$pm] = 'set';
$temp = array('name' => $pm, 'action' => $menu['Menu']['action']);
$filteredMenu[$index]['menu'] = $temp;
if (!empty($menu['sub_menus']['name'])) {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['sub_menu'][] = $temp;
}
if(!empty($menu['sub_sub_menus']['name'])){
$temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['sub_menu']['sub_menu2'][] = $temp;
}
}
}
I can filter to wrap all sum menus under menu. But I can't wrap all second level sub menu under sub menu. I spent lot of time to solve but failed.
Upvotes: 1
Views: 107
Reputation: 3311
Your php code is different from your array. From where you find
$pm = $menu['Menu']['name'];
this will display error Undefined index: Menu
I think you have to apply more condition. I don't sure apply below code. I think this will solve your problem.
$filteredMenu = array();
$unique = array();
$index = 0;
$index2 = 0;
foreach ($menus as $key => $menu) {
$pm = $menu['Menu']['name'];
$pm1 = $menu['sub_menus']['name'];
if (isset($unique[$pm])) {
if (!empty($menu['sub_menus']['name'])) {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['menu']['sub_menu'][] = $temp;
}
if(!empty($menu['sub_sub_menus']['name'])){
$temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['menu']['sub_menu']['sub_menu2'][] = $temp;
}
} else {
if ($key != 0)
$index++;
$unique[$pm] = 'set';
$temp = array('name' => $pm, 'action' => $menu['Menu']['action']);
$filteredMenu[$index]['menu'] = $temp;
if (!empty($menu['sub_menus']['name'])) {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['menu']['sub_menu'][] = $temp;
}
if(!empty($menu['sub_sub_menus']['name'])){
$temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['menu']['sub_menu']['sub_menu2'][] = $temp;
}
}
}
Upvotes: 1