2012-03-24 8 views
0

それぞれのカテゴリとすべてのサブカテゴリを表示するループを作りたいと思います。この場合、 "for"ループではなく "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-巣-ためのループを作ったが、私は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

+0

ああありがとう、私は今より良く見る。私は2番目のカテゴリのためにその不要な配列を削除しました。私はまだカテゴリー1、カテゴリー1、サブ1、そしてサブ1を取得します。非常に混乱します。 – eric01

答えて

2

内側のループが終わった、$Allcategoriesを反復、ではなくてはなりません外側ループからの値:

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

お返事ありがとうございます。元の投稿を編集して結果を得ました。あなたが何が間違っているか知っていれば教えてください。大変ありがとうございます – eric01

+0

私は誤ってあなたの投稿を編集しました。無視してください。 – eric01

0

ruakhが表示されていますが、コードの問題は$key3を参照するのを忘れていることがわかります。それは次のようになります。私も自由や<br />の除去を取られ、代わりに私はそれが何だと信じて<li>を閉じた

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>"; 
    } 

    } 

} 

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

編集:いっそ、全部欲しいです?

+0

こんにちはMichael、あなたの返事をありがとう。私はそれが[0]で各要素の最初の文字を表示するだけなので、$ Allcategories [$ key1] [$ key2] [$ key3]だと思います。 – eric01

+0

私はあなたのコードを試しましたが、それはSub 1、次にSub1、次にSub 2、そしてsub2を示しています。私は今それを変更しようとしています。 – eric01

+0

'print_r($ Allcategories);の出力を表示できますか? – MichaelRushton

関連する問題