2014-04-27 6 views
0

슬프게도 재귀가 관련되어있는 곳에서 슬프게도 고민하고 있습니다.다차원 PHP 배열을 반복하여 HTML 목록을 생성하십시오.

PHP 배열에 범주 구조가 있습니다. 나는이 같은 부모 범주하여 그룹화,하지만 해결책이 그것을 보증하는 경우, 내가 그 변경하실 수 있습니다 :

<ul> 
    <li>Category 50</li> 
    <ul> 
     <li>Category 40</li> 
     <li>Category 60</li> 
     <li>Category 70</li> 
    </ul> 
    <li>Category 1</li> 
    <ul> 
     <li>Category 2</li> 
    </ul> 
    <li>Category 80</li> 
    <li>Category 10</li> 
    <ul> 
     <li>Category 20</li> 
     <li>Category 30</li> 
     <ul> 
      <li>Category 90</li> 
     </ul> 
    </ul> 
</ul> 
:

array(5) { 
    [0] => array(4) { 
    [50] => array(5) { 
     ["category_id"] => int(50) 
     ["category_title"] => string(29) "Category 50" 
     ["parent_category_id"] => int(0) 
     ["display_order"] => int(0) 
     ["depth"] => int(0) 
    } 
    [1] => array(5) { 
     ["category_id"] => int(1) 
     ["category_title"] => string(24) "Category 1" 
     ["parent_category_id"] => int(0) 
     ["display_order"] => int(1) 
     ["depth"] => int(0) 
    } 
    [80] => array(5) { 
     ["category_id"] => int(80) 
     ["category_title"] => string(27) "Category 80" 
     ["parent_category_id"] => int(0) 
     ["display_order"] => int(1) 
     ["depth"] => int(0) 
    } 
    [10] => array(5) { 
     ["category_id"] => int(10) 
     ["category_title"] => string(29) "Category 10" 
     ["parent_category_id"] => int(0) 
     ["display_order"] => int(10) 
     ["depth"] => int(0) 
    } 
    } 
    [1] => array(1) { 
    [2] => array(5) { 
     ["category_id"] => int(2) 
     ["category_title"] => string(21) "Category 2" 
     ["parent_category_id"] => int(1) 
     ["display_order"] => int(1) 
     ["depth"] => int(1) 
    } 
    } 
    [30] => array(1) { 
    [90] => array(5) { 
     ["category_id"] => int(90) 
     ["category_title"] => string(11) "Category 90" 
     ["parent_category_id"] => int(30) 
     ["display_order"] => int(1) 
     ["depth"] => int(2) 
    } 
    } 
    [10] => array(2) { 
    [20] => array(5) { 
     ["category_id"] => int(20) 
     ["category_title"] => string(21) "Category 20" 
     ["parent_category_id"] => int(10) 
     ["display_order"] => int(10) 
     ["depth"] => int(1) 
    } 
    [30] => array(5) { 
     ["category_id"] => int(30) 
     ["category_title"] => string(17) "Category 30" 
     ["parent_category_id"] => int(10) 
     ["display_order"] => int(20) 
     ["depth"] => int(1) 
    } 
    } 
    [50] => array(3) { 
    [40] => array(5) { 
     ["category_id"] => int(40) 
     ["category_title"] => string(6) "Category 40" 
     ["parent_category_id"] => int(50) 
     ["display_order"] => int(1000) 
     ["depth"] => int(1) 
    } 
    [60] => array(5) { 
     ["category_id"] => int(60) 
     ["category_title"] => string(6) "Category 60" 
     ["parent_category_id"] => int(50) 
     ["display_order"] => int(2000) 
     ["depth"] => int(1) 
    } 
    [70] => array(5) { 
     ["category_id"] => int(70) 
     ["category_title"] => string(17) "Category 70" 
     ["parent_category_id"] => int(50) 
     ["display_order"] => int(3000) 
     ["depth"] => int(1) 
    } 
} 

는 그래서 HTML의 최종 결과는 다음과 같이한다고

여러 수준의 중첩이있을 수 있습니다.

위의 예에는 나와 있지 않지만 각 목록 항목에 'category_title'이상을 사용할 수 있다면 유용 할 것입니다 (표시된 다른 매개 변수가 있습니다 (예 : 개수 및 기타 통계가 제거 된 경우). 간단).

나는 당신이 지금까지 읽었다는 것을 믿을 수 없을만큼 감사하고 있습니다. 모든 제안을 감사하게 받았습니다.

최종 결과 HTML의

비주얼 표현 :

  • 카테고리 (50)
    • 카테고리 (40)
    • 카테고리 (60)
    • 카테고리 (70)
    • 을 :이 같은 HTML 목록에이 변환 찾고 있어요

  • 카테고리 1
    • 카테고리 2
  • 카테고리 80
  • 카테고리 10
    • 카테고리 20
    • 카테고리 30
      • 카테고리 90

답변

1

이 작동한다. 이 스크립트는 테스트되지 않은 스크립트입니다.

function recursiveList($array) { 
    echo '<ul>'; 
    foreach ($array as $key => $value) { 
     if (is_array($value) && !isset($value['category_id'])) { // if isset fails means that there is an array containing other categories arrays 
      recursiveList($value); 
     } 
     echo '<li>' . $value['category_title'] . '</li>'; 
    } 
    echo '</ul>'; 
} 

recursiveList($categories); 
+0

답장을 보내 주셔서 감사합니다. 예상대로 작동하지 않지만 어레이가 생성되는 방식 (상위 카테고리별로 그룹화)에 따라 다를 수 있습니다. 그걸로 조금 더 테스트 할 것입니다. 고맙습니다. – SpongeBobPHPPants

관련 문제