Foreach ve PHP 2D Array

3 Cevap 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';


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

Home
Map
-MapA
-MapB
Contat
Bla

I foreach nasıl kullanılacağını biliyorum ama bildiğim kadarıyla gördüğünüz gibi 1 boyutlu diziler kullanılır. Ne yukarıda örnekte yapmak zorunda?

3 Cevap

Sen foreach AMA, kolayca bir alt kalemi ne olduğunu gösterir veri yapısı hakkında bir şey değildir yuva, iki gerekir. Vs Mapa haritada? Ben bir insan olduğunu anlamaya olabilir sanırım, ama o sıralamak için komut için boilerlate bir çok yazmak gerekecek .. daha yakından size ulaşmak için çalışıyoruz ne eşleşen böylece verilerinizi yeniden düşünün.

İşte bir örnek. Muhtemelen olsa, daha iyi bir sistem ile gelebilir:

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

Sen yuva foreach ifadeleri; Böyle bir şey çalışmaları yapmalıdır.

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

Foreach gibi kolayca, çok-boyutlu diziler kullanılabilir, aynı şekilde bir for döngüsü kullanmak istiyorsunuz.

Ne olursa olsun, sizin yaklaşım biraz kapalı, burada daha iyi (ama yine de büyük değil) çözüm:

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

Yani bu sadece alt menülerin 1-düzeyi yok, dedi. Her iki şekilde de, bu fikir yardımcı olmalıdır!