Foreach and 2D Array in PHP

痴心易碎 提交于 2019-11-29 23:47:06

问题


$mainMenu['Home'][1] = '/mult/index.php';
$mainMenu['Map'][1] = '/mult/kar.php';
$mainMenu['MapA'][2] = '/mult/kara.php';
$mainMenu['MapB'][2] = '/mult/karb.php';
$mainMenu['Contact'][1] = '/mult/sni.php';
$mainMenu['Bla'][1] = '/mult/vid.php';


This is a menu, 1 indicates the main part, 2 indicates the sub-menu. Like:

Home
Map
-MapA
-MapB
Contat
Bla

I know how to use foreach but as far as I see it is used in 1 dimensional arrays. What I have to do in the example above?


回答1:


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',
     ...
);



回答2:


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;
       }
    }
}



回答3:


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!



来源:https://stackoverflow.com/questions/2353197/foreach-and-2d-array-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!