PHP中的Foreach和2D数组

时间:2010-02-28 23:55:38

标签: php foreach 2d

$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';


这是一个菜单,1表示主要部分,2表示子菜单。像:

主页
地图
-MapA
-MapB
Contat
布拉

我知道如何使用foreach,但据我所知,它用于1维数组。我在上面的例子中要做什么?

3 个答案:

答案 0 :(得分:9)

您需要嵌套两个foreach但是,您的数据结构没有任何内容可以轻松指示什么是子项。地图与MapA?我想人类可以解决这个问题,但你必须为你的脚本编写大量的文件才能对其进行排序。考虑重构你的数据,使其更符合你想要实现的目标。

这是一个例子。不过,你可能想出一个更好的系统:

$mainMenu = array(
    'Home' => '/mult/index.php',
    'Map' => array(
        '/mult/kar.php',
        array(
            'MapA' => '/mult/kara.php',
            'MapB' => '/mult/karb.php'
        )
     ),
     'Contact' => '/mult/sni.php',
     ...
);

答案 1 :(得分:7)

你嵌套foreach语句;这样的事情应该做的工作。

foreach($mainMenu as $key=>$val){
    foreach($val as $k=>$v){
       if($k == 2){
         echo '-' . $key;
       }else{
          echo $key;
       }
    }
}

答案 2 :(得分:1)

Foreach可以很容易地在多维数组中使用,就像使用for循环一样。

无论如何,你的方法有点偏,这是一个更好(但仍然不是很好)的解决方案:

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

那说,这只做了1级的子菜单。无论哪种方式,它都可以帮助你实现这个想法!