2015-01-15 3 views
2

나는 다음과 같은 배열이 있습니다배열에 따라 중첩 된 HTML 코드를 생성

[0] => [ 
    'parent_id' => null, 
    'id' => 1, 
    'count' => 0 
    'children' => [ 
    [0] => [ 
     'parent_id' => 1, 
     'id' => 11, 
     'count' => count11 
    ] 
    [0] => [ 
     'parent_id' => 1, 
     'id' => 12, 
     'count' => count12 
    ] 
    ] 
], 
[1] => [ 
    'parent_id' => null, 
    'id' => 2, 
    'count' => 0, 
    'children' => [ 
    [0] => [ 
     'parent_id' => 2, 
     'id' => 21, 
     'count' => 0, 
     'children' => [ 
     [0] => [ 
      'parent_id' => 21, 
      'id' => 211, 
      'count' => count211 
     ] 
     ] 
    ] 
    ] 
] 

을 그리고 난이 다음과 같은 패턴에 따라 밖으로 중첩 된 HTML 목록을 만들 수 있습니다

<ul> 
<li><span>All categories (count)</span> 
<ul> 
    <li> 
    <span>Category 1 (count1)</span> 
    <ul> 
     <li> 
     <span>Category 11 (count11)</span> 
     </li> 
     <li> 
     <span>Category 12 (count12)</span> 
     </li> 
    </ul> 
    </li> 
    <li> 
    <span>Category 2 (count2)</span> 
    <ul> 
     <li> 
     <span>Category 21 (count21)</span> 
     <ul> 
      <li> 
      <span>Category 211 (count211)</span> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
</li> 
</ul> 

문제는 카운트 값이 잎에만 존재하므로 부모가 자녀의 모든 값을 합산해야한다는 것입니다. 또 다른 문제는 여기서 헤더 (모든 카테고리)가 필요하지만 배열에 존재하지 않는다는 것입니다.

어떻게하면됩니까?

나는 몇 가지 해결책을 제시하려고 노력했지만 아무 것도 작동하지 않습니다.

나는 어떻게 생겼는지 전혀 모른다.

+0

일부 테스트를 수행하기 위해 PHP로 배열을 제공 할 수 있습니까? –

답변

0

Blockquote 다음은 사용자 요구 사항에 따라 정확히 작동하는 코드입니다.

<?php 

class test{ 

    public function getTree($arr){ 
     $html = '<ul>'; 
     foreach($arr as $k=>$v){ 
      $html .= '<li><span>'.$v['count'].'</span>'; 

      if(isset($v['children'])){ 
       if(is_array($v['children'])){ 
        $html .= $this->getTree($v['children']); 
       } 
      } 
      $html .= '</li>'; 
     } 
     return $html .= '</ul>'; 
    } 
} 


$arr = array(
array(
    'parent_id' => null, 
    'id' => 1, 
    'count' => 'count1', 
    'children' => array(
     array(
      'parent_id' => 1, 
      'id' => 11, 
      'count' => 'count11' 
     ), 
     array(
      'parent_id' => 1, 
      'id' => 12, 
      'count' => 'count12' 
     ) 
    ) 
), 
array(
    'parent_id' => null, 
    'id' => 2, 
    'count' => 'count2', 
    'children' => array(
     array(
      'parent_id' => 1, 
      'id' => 21, 
      'count' => 'count21', 
      'children' => array(
       array(
        'parent_id' => 21, 
        'id' => 211, 
        'count' => 'count211' 
       ) 
      ) 
     ) 
    ) 
) 
); 

$obj = new test(); 
echo $obj->getTree($arr); 

?>