在这种情况下,我如何使用“foreach”代替“for”循环?

时间:2012-03-24 13:49:35

标签: php loops foreach

我想制作一个循环来显示每个类别和所有子类别。我有这个数组:

$Allcategories = array(
  array(
    array("Category 1", 'category1'),
    array("Sub 1", 'sub1'),
    array("Sub 2", 'sub2'), 
    array("Sub 3", 'sub3') 
  ),
  array(
      array("Category 2", 'category2'),
      array("Sub 1", 'sub1'),
      array("Sub 2", 'sub2'), 
      array("Sub 3", 'sub3')
    )
);

我已经制作了一个3-nest-for循环,但是我希望用foreach来简化它。 这是我的 for 循环:

foreach ($Allcategories as $val_1)
{    
    echo "<a href='index.php?category=", $val_1[0][1], "'>", $val_1[0][0], "</a>";    
    foreach ($val_1 as $val_2)
    {    
        foreach ($val_2 as $val_3)
        {
            printf('<li><a href="index.php?category=%1$s">%1$s</a><br />', $val_3);
        }    
    }    
}

问题是我得到了这个结果:

Category 1

    -Category 1

    -category1

    -Sub 1

    -sub1

    -Sub 2

    -sub2

2 个答案:

答案 0 :(得分:2)

内部循环不应该遍历$Allcategories,而是覆盖外部循环的值:

foreach ($Allcategories as $layerNum => $layer) {
    ...
    foreach ($layer as $rowNum => $row) {
        ...
        foreach ($row as $colNum => $category) {

答案 1 :(得分:0)

虽然您应该将其写为 ruakh ,但知道代码的问题是您忘记引用$key3可能会有用。它应该是:

echo "<li><a href='index.php?category=".$Allcategories[$key1][$key2][$key3]
[1]."'>".$Allcategories[$key1][$key2][$key3][0]."</a><br />";

编辑:或者更好的是,整个事情:

foreach ($Allcategories as $val_1)
{

  echo "<a href='index.php?category=" . $val_1[0][1] . "'>" . $val_1[0][0] . "</a>";

  foreach ($val_1 as $val_2)
  {

    foreach ($val_2 as $val_3)
    {
      echo "<li><a href='index.php?category=" . $val_3[1] . "'>" . $val_3[0] . "</a><b></li>";
    }

  }

}

我也冒昧或删除了<br />而关闭了<li>因为我认为这就是你想要的?