2012-03-24 91 views
0

我想做一個循環來顯示每個類別和所有子類別。我有這樣的數組:在這種情況下,我將如何使用「foreach」而不是「for」循環?

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

+0

我縮進了原始數組,以便更清楚地看到深度的變化。您需要處理代碼中的這些深度更改,否則它將不會輸出預期的數據。 – hakre 2012-03-24 14:34:12

+0

哦,好的,非常感謝,現在我明白了。我刪除了第二類不需要的數組。我仍然得到1類,然後1類,然後是1號,然後sub1 ..非常混亂。 – eric01 2012-03-24 14:45:49

回答

2

內循環不應超過$Allcategories重複,而是在來自外環的值:

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

嗨,感謝您的回覆。我編輯了我的原始帖子的結果。如果你知道什麼是錯的,請告訴我。非常感謝 – eric01 2012-03-24 14:09:01

+0

哎呀我錯誤地編輯了你的帖子,請忽略 – eric01 2012-03-24 14:38:20

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>因爲我相信這就是你想?

+0

嗨,Michael,謝謝你的回覆。我認爲它是$ Allcategories [$ key1] [$ key2] [$ key3],因爲使用[0],它最終只顯示每個元素的第一個字母。 – eric01 2012-03-24 14:17:33

+0

我試過你的代碼,但它顯示Sub 1,然後sub1,然後Sub 2,然後sub2。我正在嘗試修改它。 – eric01 2012-03-24 14:18:53

+0

你能告訴我們'print_r($ Allcategories)的輸出;'請嗎? – MichaelRushton 2012-03-24 14:21:06

相關問題