2013-03-05 44 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; 
    } 
} 
?>