Как бы я использовал цикл foreach вместо цикла for в этом случае? - PullRequest
0 голосов
/ 24 марта 2012

Я хочу сделать цикл для отображения каждой категории и всех подкатегорий. У меня есть этот массив:

$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 гнездами, который работает, но я хотел бы упростить его с 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 ]

2 голосов
/ 24 марта 2012

Внутренние циклы должны проходить не по $Allcategories, а по значениям из внешних циклов:

foreach ($Allcategories as $layerNum => $layer) {
    ...
    foreach ($layer as $rowNum => $row) {
        ...
        foreach ($row as $colNum => $category) {
0 голосов
/ 24 марта 2012

Несмотря на то, что вы должны написать это, как показало 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>, так как считаю, что это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...