$this->loadModel('Menu');
$this->loadModel('SubMenu');
$this->loadModel('SubSubMenu');
$options['joins'] = array(
array('table' => 'sub_menus',
'alias' => 'sub_menus',
'type' => 'LEFT',
'conditions' => array(
'sub_menus.menu_id = Menu.id'
)
),
array('table' => 'sub_sub_menus',
'alias' => 'sub_sub_menus',
'type' => 'LEFT',
'conditions' => array(
'sub_sub_menus.sub_menu_id = sub_menus.id'
)
)
);
$options['fields'] = array('Menu.id','Menu.name', 'Menu.action', 'sub_menus.id','sub_menus.name', 'sub_menus.action','sub_sub_menus.id', 'sub_sub_menus.name', 'sub_sub_menus.action');
$menus = $this->Menu->find('all', $options);
$ menus数组是这样的:
Array
(
[0] => Array
(
[Menu] => Array
(
[id] => 6
[name] => Bangladesh
[action] => bangladesh
)
[sub_menus] => Array
(
[id] => 2
[name] => Politics
[action] => politics
)
[sub_sub_menus] => Array
(
[id] => 1
[name] => submenu2
[action] => test
)
)
[1] => Array
(
[Menu] => Array
(
[id] => 9
[name] => Entertainment
[action] => entertainment
)
[sub_menus] => Array
(
[id] => 19
[name] => Music
[action] => music
)
[sub_sub_menus] => Array
(
[id] => 19
[name] => test
[action] => test1
)
)
[2] => Array
(
[Menu] => Array
(
[id] => 6
[name] => Bangladesh
[action] => bangladesh
)
[sub_menus] => Array
(
[id] => 2
[name] => Politics
[action] => politics
)
[sub_sub_menus] => Array
(
[id] => 20
[name] => AML
[action] => aml
)
)
[3] => Array
(
[Menu] => Array
(
[id] => 13
[name] => Comments
[action] => comments
)
[sub_menus] => Array
(
[id] => 35
[name] => Issuse
[action] => issuse
)
)
[4] => Array
(
[Menu] => Array
(
[id] => 6
[name] => Bangladesh
[action] => bangladesh
)
[sub_menus] => Array
(
[id] => 2
[name] => Politics
[action] => politics
)
[sub_sub_menus] => Array
(
[id] => 22
[name] => One
[action] => one
)
)
)
我期望的数组是:
Array
(
[0] => Array
(
[Menu] => Array
(
[id] => 6
[name] => Bangladesh
[action] => bangladesh
)
[sub_menus] => Array
(
[0] => Array
(
[id] => 2
[name] => Politics
[action] => politics
[sub_menu2] => Array
(
[0] => Array
(
[id] => 1
[name] => submenu2
[action] => test
)
[1] => Array
(
[id] => 20
[name] => AML
[action] => aml
)
[2] => Array
(
[id] => 22
[name] => One
[action] => one
)
)
)
)
)
[1] => Array
(
[Menu] => Array
(
[id] => 9
[name] => Entertainment
[action] => entertainment
)
[sub_menus] => Array
(
[0] => Array
(
[id] => 19
[name] => Music
[action] => music
[sub_menu2] => Array
(
[0] => Array
(
[id] => 19
[name] => test
[action] => test1
)
)
)
)
)
[2] => Array
(
[Menu] => Array
(
[id] => 13
[name] => Comments
[action] => comments
)
[sub_menus] => Array
(
[0] => Array
(
[id] => 35
[name] => Issuse
[action] => issuse
)
)
)
)
这里我想要的是使用过滤数组生成树状菜单。所有sub_menu将被具有相同菜单[id]的菜单包裹,并且所有sub_sub_menu将被具有相同sub_menu [id]的sub_menu包裹。我试了几天但没有运气。我很抱歉,如果这是一个非常基本的问题或类似的东西,不应该在这里问。提前致谢。
答案 0 :(得分:2)
访问https://eval.in/436359 但是不知道如何完成这项工作,所以这是一个部分答案,但希望它能让你朝着正确的方向前进。 使用此代码。
$filteredMenu = array();
$temp1 = array();
$unique = array();
$unique1 = array();
$index = 0;
$index2 = 0;
foreach ($menus as $key => $menu) {
$pm = $menu['Menu']['name'];
$pm1 = $menu['sub_sub_menus']['name'];
if (isset($unique[$pm]) || array_key_exists($pm, $unique)) {
if (!empty($menu['sub_menus']['name'])) {
if(!empty($menu['sub_sub_menus']['name'])){
if (isset($unique1[$pm1])) {
$temp1[$index2]= array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_sub_menus']['action']);
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action'], 'sub_menu2' => $temp1 );
$filteredMenu[$index]['Sub_menu'][] = $temp;
}
// $filteredMenu[$index]['Sub_menu']['sub_menu2'][] = $temp;
}
else {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['Sub_menu'][] = $temp;
}
}
}else {
if ($key != 0)
$index++;
$unique[$pm] = 'set';
// $unique1[$pm1] = 'set';
$temp = array('name' => $pm, 'action' => $menu['Menu']['action']);
$filteredMenu[$index]['Menu'] = $temp;
if (!empty($menu['sub_menus']['name'])) {
if(!empty($menu['sub_sub_menus']['name'])){
//if (isset($unique1[$pm1])) {
if ($key != 0)
$index2++;
$unique1[$pm1] = 'set';
$temp1[$index2] = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_sub_menus']['action']);
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action'], 'sub_menu2' => $temp1 );
$filteredMenu[$index]['Sub_menu'][] = $temp;
// $filteredMenu[$index]['Sub_menu']['sub_menu2'][] = $temp;
// }
}
else {
$temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
$filteredMenu[$index]['Sub_menu'][] = $temp;
}
}
}
}
print_r($filteredMenu);