2012-03-24 4 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으로 단순화하고 싶습니다 :이 배열을 가지고있다. 문제는 내가이 결과를 얻고있다

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

오, 정말 고마워. 이제 더 좋아 보인다. 나는 두 번째 범주에 대한 해당 원치 않는 배열을 삭제했습니다. 나는 여전히 카테고리 1, 카테고리 1, 서브 1, 서브 1을 얻는다. 매우 혼란 스럽다. – eric01

답변

2

가 내부 루프를 통해, 오히려 $Allcategories 반복하지만, 안 은 여기 내 for 루프 외부 루프의 값 :

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

안녕하십니까. 결과와 함께 원래 게시물을 편집했습니다. 무엇이 잘못되었는지 알고 있으면 알려주세요. 고마워요, 안부 – eric01

+0

실수로 귀하의 게시물을 편집했습니다. 무시하십시오. – eric01

0

ruakh으로 표시해야하지만 코드의 문제는 $key3을 참조하는 것을 잊어 버리고 있다는 것을 아는 것이 유용 할 수 있습니다. 나는 그것이 당신 무엇을 믿기로

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>을 닫은 : 더 나은 아직 전부 또는 : 그것은해야한다 :

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

편집 필요?

+0

안녕하세요, 귀하의 회신에 감사드립니다. [0]을 사용하면 각 요소의 첫 글자 만 표시되기 때문에 $ Allcategories [$ key1] [$ key2] [$ key3]라고 생각합니다. – eric01

+0

코드를 시도했지만 Sub 1, Sub1, Sub 2, Sub2를 보여줍니다. 나는 지금 그것을 고치려고 노력하고있다. – eric01

+0

'print_r ($ Allcategories);의 출력을 보여줄 수 있습니까? – MichaelRushton

관련 문제