2011-09-08 50 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']; 
}