2013-03-05 101 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 
     ) 
) 

我需要像這樣的列表,以結束:

  • 父A類
  • 父B類
    • 兒童A類
      • 超級兒童類別A

什麼是做到這一點的最簡單的方法?

+1

使用遞歸的foreach循環。 – 2013-03-05 09:53:35

+1

我會首先確保你已經有了一棵實際的樹(也就是扁平它),這將使它更容易處理。因此,具有'categoryParent'的映射爲一組子對象。然後使用foreach循環,抓住每個循環的子節點(如果它存在的話)。 – 2013-03-05 09:54:10

回答

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