4
 $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 is like this:

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
                )

        )

)

My expected array is:

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
                      )
                )
      )
)

Here What I want is tree menu generation using filtering array. All sub_menu will be wrapped by menu having same menu[id] and all sub_sub_menu will be wrapped by sub_menu having same sub_menu[id]. I trying for couple of day but no luck. I am sorry if it is very basic question or something like one that should not be asked here. Thanks in advance.

1
  • I would suggest you rethink your Object methods. Your source data is at least in my opinion not well suited to your needs at all, and will mostly likely become quite limiting in the future. Consider thinking in smaller pieces rather than just grabbing as much data as you can in one punch. I'm sorry this is not very definitive perhaps someone can give you a real answer. Commented Sep 19, 2015 at 19:46

1 Answer 1

2

Visit here https://eval.in/436359 Not sure how to get this done, though, so this is a partial answer, but hopefully it sends you in the right direction. Use this code.

$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);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.