2013-03-05 1 views
0

나는이 다음과 같은 배열 :이 같은 목록으로 끝낼 필요가다차원 배열을 List로 변환하는 가장 빠른 방법은 무엇입니까?

Array 
(
    [0] => stdClass Object 
     (
      [categoryid] => 60 
      [categoryName] => Parent Category A 
      [categoryParent] => 
     ) 

    [1] => stdClass Object 
     (
      [categoryid] => 65 
      [categoryName] => Parent Category B 
      [categoryParent] => 
     ) 

    [2] => stdClass Object 
     (
      [categoryid] => 68 
      [categoryName] => Child Category A 
      [categoryParent] => 65 
     ) 

    [3] => stdClass Object 
     (
      [categoryid] => 69 
      [categoryName] => Super Child Category A 
      [categoryParent] => 68 
     ) 
) 

:

  • 상위 카테고리
  • 상위 카테고리 B
    • 하위 카테고리
      • 슈퍼 하위 카테고리 A

것은 무엇이 작업을 수행하는 가장 쉬운 방법이 될 것입니다?

+1

사용 재귀 foreach 루프를. –

+1

먼저 실제 트리를 가져야합니다 (즉, 플랫 화). 그러면 처리가 더 쉬워집니다. 그래서'categoryParent'를 가진 것들은 자식 배열로 매핑됩니다. 그런 다음 존재하는 경우 각 자식을 가져 오는 foreach 루프를 사용하십시오. –

답변

2

이 시도 :

function htmlList($array, $parent = null){ 
    $str = '<ul>'; 
    foreach($array as $object){ 
     if(!$parent){ 
      if(!$object->categoryParent){ 
       $str .= '<li>' . $object->categoryName; 
       $str .= htmlList($array, $object->categoryid); 
       $str .= '</li>'; 
      } 
     } 
    } 
    return $str .= '</ul>'; 
} 

echo htmlList($yourArray); 
1
function mylist($a, $parent='') { 
    $r = '' ; 
    foreach ($a as $i) { 
     if ($i['categoryParent'] == $parent) { 
      $r = $r . "<li>" . $i['categoryName'] . mylist($a, $i['categoryid']) . "</li>"; 
     } 
    } 
    return ($r==''?'':"<ul>". $r . "</ul>"); 
} 
0

상위 항목이있는 배열을 유지하고 하위 항목을 요소의 자체 배열에 추가 할 것을 제안합니다. (당신의 나무와 유사)

당신은 예에 따라이 요소를 읽을 수 있습니다

<?php 
BuildList($arrayParent, 0); 

function BuildList($arrayElements, $depth) 
{ 
    foreach($arrayElements as $element) 
    { 
     echo str_repeat("&nbsp;&nbsp;", $depth) . $element->categoryName; 
     $depth++; 
     if(count($element->subCategory) > 0) 
      $depth = BuildList($element->subCategory, $depth); 

     return $depth; 
    } 
} 
?> 
관련 문제