2011-09-08 53 views
1

我試圖創建一個具有列表中的每個項目的一個子表動態導航列表PHP如何通過多維數組循環

我有1個陣列包含12個父類值,是一個直接的一維數組。

我通過循環使用foreach循環,使無序列表

我遇到的問題是,我有子類的數組是一個多維數組,我需要爲每一個嵌套列表屬於父類別的子類別。

<?php 
//mysql query to get the parent categories 
$query = "SELECT `parent` FROM `categories` GROUP BY `parent`"; 
$result = mysql_query($query); 

while ($row = mysql_fetch_assoc($result)) { 
    $cat[] = $row['parent']; //define the parent categories as a variable 
}?> 

<div id="navigation"> 
    <ul> 
     <li><a href="http://localhost/softwarereviews.com">Home</a></li> 
     <?php 
     //loop through the parent categories 
     foreach ($cat as $parent) { 

      //another query to get the child categories that belong to each parent category 
      $query = "SELECT * FROM `categories` WHERE `parent` = '$parent'"; 
      $result = mysql_query($query) 
       or die(mysql_error()); 

      while ($row = mysql_fetch_assoc($result)) { 
       //need 2 results so create a multi - dimensional array 
       $children[] = array($row['name'] => $row['cat_label']); 

      }?> 
      <li><?php echo $parent; ?></li> 
      <ul> 
       <?php foreach ($children as $key => $value) { ?> 

       <?php foreach ($value as $key => $value) { ?> 

        <li><a href="<?php echo $value;?>"><?php echo $key;?></a><li> 

       <?php } 
      }?> 
      </ul> 
      <?php }?> 
    </ul> 
</div> 

此刻會出現什麼情況是,每個類別的子列表不斷追加前面列出的成績,使每個子列表的結果越做越大。

+0

您不應該在每秒中使用$ key => $ value!這是非常混亂,容易出錯!至少將它們命名爲$ key2 => $ value2 – zzarbi

回答

2

初始化$childrenforeach

foreach ($cat as $parent) { 
    $children = array(); 
    ... 
+0

非常感謝你! – user866190

0

裏面,如果你有一個簡單的數組

foreach($rows as $row){ 
    $row[0]; 
    $row['myKey']; 
} 

,如果你有multidimensionnal陣列但這種陣列可以與一個唯一的行,這樣做

// foreach((condition)? true:false as child){ ... } 
foreach((is_array($rows[0]))? $rows : array('0'=>$rows) as $row){ 
    $row[0]; 
    $row['myKey']; 
}