2014-03-31 7 views
0

어떻게이 구조를 다중 레벨 메뉴에 표시합니까?PHP 다중 레벨 트리 노드 메뉴 표시

array 
    0 => 
    array 
     'product_category_code' => string 'bracelets' (length=9) 
     'product_category_desc' => string 'Bracelets' (length=9) 
     'parent_node' => string '' (length=0) 
     'inactive' => string '0' (length=1) 
     'sort' => string '0' (length=1) 
     'created_by' => string '1' (length=1) 
     'created_date' => string '2014-03-14 22:04:08' (length=19) 
     'modified_by' => string '1' (length=1) 
     'modified_date' => string '2014-03-14 22:09:05' (length=19) 
    1 => 
    array 
     'product_category_code' => string 'floral-dress' (length=12) 
     'product_category_desc' => string 'Floral Dress' (length=12) 
     'parent_node' => string '' (length=0) 
     'inactive' => string '0' (length=1) 
     'sort' => string '0' (length=1) 
     'created_by' => string '1' (length=1) 
     'created_date' => string '2014-03-14 22:09:49' (length=19) 
     'modified_by' => string '1' (length=1) 
     'modified_date' => string '2014-03-30 19:06:58' (length=19) 
    2 => 
    array 
     'product_category_code' => string 'flowery-bracelets' (length=17) 
     'product_category_desc' => string 'Flowery Bracelets' (length=17) 
     'parent_node' => string 'bracelets' (length=9) 
     'inactive' => string '0' (length=1) 
     'sort' => string '0' (length=1) 
     'created_by' => string '1' (length=1) 
     'created_date' => string '2014-03-14 22:09:16' (length=19) 
     'modified_by' => string '1' (length=1) 
     'modified_date' => string '2014-03-30 19:08:44' (length=19) 
    3 => 
    array 
     'product_category_code' => string 'small-flowery-bracelets' (length=23) 
     'product_category_desc' => string 'Small Flowery Bracelets' (length=23) 
     'parent_node' => string 'flowery-bracelets' (length=17) 
     'inactive' => string '0' (length=1) 
     'sort' => string '0' (length=1) 
     'created_by' => string '1' (length=1) 
     'created_date' => string '2014-03-14 22:08:35' (length=19) 
     'modified_by' => string '1' (length=1) 
     'modified_date' => string '2014-03-30 19:09:44' (length=19) 
    4 => 
    array 
     'product_category_code' => string 'summer-dress' (length=12) 
     'product_category_desc' => string 'Summer Dress' (length=12) 
     'parent_node' => string '' (length=0) 
     'inactive' => string '0' (length=1) 
     'sort' => string '0' (length=1) 
     'created_by' => string '1' (length=1) 
     'created_date' => string '2014-03-14 22:09:29' (length=19) 
     'modified_by' => string '0' (length=1) 
     'modified_date' => null 

그리고 출력은 다음과 같이해야한다 :

  • 팔찌
    • 플라워 팔찌
      • 작은 플라워 팔찌
    • 다음

      는 구조입니다
  • 꽃 드레스
  • 여름 드레스 여기

내가했지만 여전히 아이가

function getChildren($rows, $p = 0) { 
$r = array(); 
foreach($rows as $row) { 
    if ($row['parent_node']==$p) { 
     var_dump($p); 
     $r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']); 
    } 
} 
return $r; 

감사 노드를 표시하는 것입니다!

답변

2

배열에 카테고리를 할당했기 때문에 여전히 카테고리가 있기 때문입니다. 당신이 할 수있는 것은 인수를 참조로 전달하고 foreach 루프에서 이미 할당 된 범주에서 배열을 지울 수있는 기능을 수행하는 것입니다. 아래의 간단한 구현.

function getChildren(&$rows, $p = 0) { 
    $r = array(); 
    foreach($rows as $row_id => $row) { 
     if ($row['parent_node']==$p) { 
      $r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']); 
      unset($rows[$row_id]); 
     } 
    } 
    return $r; 
} 
+0

감사 ailvenge! 정확히 필요한 것! 매개 변수의 $ 행에 "&"가 있음을 알 수 있습니다. 그게 뭔지 설명해 주시겠습니까? – basagabi

+0

인수를 메모리의 변수에 대한 참조로 전달합니다. 그러면 배열을 업데이트하거나 거기에 표시된 행을 삭제할 수 있습니다. &, 삭제할 때 원래 배열 대신 배열의 복사본을 전달하므로 요소를 삭제하더라도 배열의 복사본에서 삭제되므로 원본에 아무런 영향을 미치지 않습니다 배열 : – sunshinejr

+0

Avenvenge, 나는 부모 노드를 가진 레코드가 부모가되면 부모 노드가 자식으로 표시되지 않는 문제를 발견했습니다. 위의 배열을 감안할 때 팔찌에 꽃 장식 부모 노드가있는 경우 팔찌는 자식 노드로 표시되지 않습니다. – basagabi