2015-04-03 96 views
0

我面对这种挑战:显示分层,多维阵列作为嵌套列表(递归)

我需要从一个分层的,多维阵列作为嵌套列表显示数据。我想使用递归来做到这一点,因为我不知道列表可能有多少级别。这是我工作中的数据(简化):

array (size=54) 
    0 => 
    object(stdClass)[786] 
     public 'term_id' => string '1' (length=3) 
     public 'name' => string 'All' (length=25) 
     public 'parent' => string '0' (length=3) 
     public 'children' => array (size=2) 
      0 => 
       object(stdClass)[785] 
        public 'term_id' => string '2' (length=3) 
        public 'name' => string 'Clothes' (length=25) 
        public 'parent' => string '1' (length=3) 
        public 'children' => (size=1) 
         0 => 
         object(stdClass)[786] 
          public 'term_id' => string '3' (length=3) 
          public 'name' => string 'Scarves' (length=25) 
          public 'parent' => string '2' (length=3) 
      1 => 
       object(stdClass)[785] 
        public 'term_id' => string '4' (length=3) 
        public 'name' => string 'Gloves' (length=25) 
        public 'parent' => string '1' (length=3) 

结果应该是一个嵌套列表类似于此:

  • 所有
    • 衣服
      • 围巾
    • 食品
      • 蔬菜

尝试许多时间后,我已经建立了利用array_walk_recursive和我自己的另一递归函数(简体):

function attachChildren($items) 
{ 
    foreach($items as $item) { 
     echo $item->name; 
     if (is_array(($item->children))) { 
      $this->attachChildren($item->children); 
     } 
    } 
} 

function buildTree($value, $key) 
{ 
    echo $value->name; 
    if (is_array($value->children)) { 
     $this->attachChildren($value->children); 
    }   
} 

array_walk_recursive($sortedArray, 'buildTree'); 

这个解决方案的问题正在获取格式化权限。两个函数产生输出,我发现很难将项目排列在缩进列表中。

将此数组显示为具有多个级别的缩进列表的最佳方法是什么?

+0

遍历数组和子数组。第一个索引元素'ul'子数组''li'子数组追加'ul> li' – Bsienn 2015-04-03 11:54:27

回答

0
function walk($array){ 
    foreach ($array as $key => $value) { 
     echo "<ul>"; 
     if(is_array($value)){ 
      echo "<li>{$value['name']}</li>"; 

      walk($value); 
     } 
     echo "</ul>"; 
    } 
} 

$ar = [ 
     ['name' => 'All', ['name' => 'Clothes', ['name' =>'Scarves']]], 
     ['name' => 'Gloves'] 
     ]; 

walk($ar);