2010-02-28 5 views
1
$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'; 


Ceci est un menu, 1 indique la partie principale, 2 indique le sous-menu. Comme:
Foreach et 2D Array PHP

Accueil
Plan
-MapA
-MapB
Contat
Bla

Je sais comment utiliser foreach mais pour autant que je le vois est utilisé dans 1 dimensions tableaux. Ce que je dois faire dans l'exemple ci-dessus?

+0

Votre structure de données n'est pas définie correctement. Que devrait-il se passer quand '$ mainMenu ['MapA'] [1]' est défini? Mieux vaut utiliser un tableau comme ceci '$ mainMenup [] = Array (" Home "," /mult/index.php ", 1)' –

Répondre

9

Vous devez imbriquer deux foreach MAIS, il n'y a rien dans votre structure de données qui indique facilement ce qu'est un sous-élément. Carte vs. MapA? Je suppose qu'un humain pourrait le comprendre, mais vous devrez écrire beaucoup de texte pour que votre script puisse le trier. Pensez à restructurer vos données pour qu'elles correspondent mieux à ce que vous essayez d'obtenir.

Voici un exemple. Vous pouvez probablement trouver un meilleur système, cependant:

$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

Vous imbriquez foreach instructions; Quelque chose comme ça devrait faire le travail.

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

Foreach peut tout aussi facilement être utilisé dans des tableaux multidimensionnels, de la même façon que vous utilisez une boucle.

Quelle que soit, votre approche est un peu loin, voici une meilleure (mais toujours pas grande) 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 
     } 
    } 
} 

Cela dit, cela ne fait 1 niveau de sous-menus. De toute façon, cela devrait vous aider à avoir l'idée!

+0

'$ mainMenu ['Carte']' devrait avoir '[1]' ajouté (ou une clé appropriée) sinon vous écrasez simplement la valeur. – jasonbar

+0

@jasonbar merci j'ai oublié que –