Foreach и 2D Array в PHP

$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 но, насколько я вижу, он используется в 1-мерных массивах. Что я должен сделать в примере выше?

Вам нужно будет вложить два 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', ... ); 

Вы устанавливаете заявления foreach; Что-то вроде этого должно делать работу.

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

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