Foreach и 2D Array в PHP - PullRequest
       11

Foreach и 2D Array в PHP

1 голос
/ 01 марта 2010
$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
Bla

Я знаю, как использовать foreach, но, насколько я вижу, он используется в одномерных массивах. Что я должен сделать в приведенном выше примере?

Ответы [ 3 ]

9 голосов
/ 01 марта 2010

Вам нужно вложить два foreach НО, в вашей структуре данных нет ничего, что бы легко указывало, что является подпунктом. Карта против карты? Я думаю, что человек мог бы понять это, но вам придется написать много шаблонов для вашего сценария, чтобы отсортировать его. Подумайте о реструктуризации ваших данных, чтобы они более точно соответствовали тому, чего вы пытаетесь достичь.

Вот пример. Вы, вероятно, можете придумать лучшую систему, хотя:

$mainMenu = array(
    'Home' => '/mult/index.php',
    'Map' => array(
        '/mult/kar.php',
        array(
            'MapA' => '/mult/kara.php',
            'MapB' => '/mult/karb.php'
        )
     ),
     'Contact' => '/mult/sni.php',
     ...
);
7 голосов
/ 01 марта 2010

Вы вкладываете foreach заявления; Нечто подобное должно сделать работу.

foreach($mainMenu as $key=>$val){
    foreach($val as $k=>$v){
       if($k == 2){
         echo '-' . $key;
       }else{
          echo $key;
       }
    }
}
1 голос
/ 01 марта 2010

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-й уровень подменю. В любом случае, это должно помочь вам понять идею!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...