Foreach and 2D Array in PHP

前端 未结 3 933
逝去的感伤
逝去的感伤 2021-01-03 15:23
$mainMenu[\'Home\'][1] = \'/mult/index.php\';
$mainMenu[\'Map\'][1] = \'/mult/kar.php\';
$mainMenu[\'MapA\'][2] = \'/mult/kara.php\';
$mainMenu[\'MapB\'][2] = \'/mul         


        
相关标签:
3条回答
  • 2021-01-03 15:36

    You would need to nest two foreach BUT, there is nothing about your data structure that easily indicates what is a sub-item. Map vs. MapA? I guess a human could figure that out, but you'll have to write a lot of boilerlate for your script to sort that.. Consider restructuring your data so that it more closely matches what you are trying to achieve.

    Here's an example. You can probably come up with a better system, though:

    $mainMenu = array(
        'Home' => '/mult/index.php',
        'Map' => array(
            '/mult/kar.php',
            array(
                'MapA' => '/mult/kara.php',
                'MapB' => '/mult/karb.php'
            )
         ),
         'Contact' => '/mult/sni.php',
         ...
    );
    
    0 讨论(0)
  • 2021-01-03 15:39

    Foreach can just as easily be used in multi-dimensional arrays, the same way you would use a for loop.

    Regardless, your approach is a little off, here's a better (but still not great) solution:

    $mainMenu['Home'][1] = '/mult/index.php';
    $mainMenu['Map'][1] = '/mult/kar.php';
    $mainMenu['Map']['children']['MapA'] = '/mult/kara.php';
    $mainMenu['Map']['children']['MapB'] = '/mult/karb.php';
    $mainMenu['Contact'][1] = '/mult/sni.php';
    $mainMenu['Bla'][1] = '/mult/vid.php';
    
    foreach($mainMenu as $k => $v){
        // echo menu item
        if(isset($v['children'])){
            foreach($v['children'] as $kk => $vv){
                // echo submenu
            }
        }
    }
    

    That said, this only does 1-level of submenus. Either way, it should help you get the idea!

    0 讨论(0)
  • 2021-01-03 15:51

    You nest foreach statements; Something like this should do the work.

    foreach($mainMenu as $key=>$val){
        foreach($val as $k=>$v){
           if($k == 2){
             echo '-' . $key;
           }else{
              echo $key;
           }
        }
    }
    
    0 讨论(0)
提交回复
热议问题