2011-01-17 7 views
3

PHP 배열을 다르게 주문해야합니다 (주석 포함).PHP 배열을 주문하십시오.

같이해야 배열 내용의 순서 ...

parent 
child 
    child 
    child 
parent 
child 
    child 
etc. 

부모 코멘트 "부모 = 0"이있다. 하위 주석은 부모의 ID를가집니다 (예 : "parent = 1"). 자식 설명의 깊이/양을 알 수 없습니다.

예를 들어 이런 종류의 배열이있을 때 언급 된 순서로 배열을 가져올 수 있습니까?

Array 
(
    [0] => Array 
     (
      [comment_id] => 1 
      [parent] => 0 
     ) 

    [1] => Array 
     (
      [comment_id] => 2 
      [parent] => 0 
     ) 

    [2] => Array 
     (
      [comment_id] => 3 
      [parent] => 1 
     ) 

    [3] => Array 
     (
      [comment_id] => 4 
      [parent] => 3 
     ) 

) 
+0

이 잘 날이 나무를 처리하는 가장 좋은 solutino이 멀지 않은 것입니다 가정 해 봅시다. 매우 리소스를 소비하지만 이것은 일반적으로 모든 루트 노드를 인쇄/저장하고 다음 레벨에서 모든 하위 노드를 선택하고 그 하위 노드로 자신을 호출하는 재귀 함수로 수행됩니다. "parent id tree node"또는 무언가 . 벤은 전에 1000 번 했어. –

답변

1

answer here에서 빌려주십시오. 체크 아웃 할 수있는 유사한 질문이 많이 있습니다. 같은

뭔가 :

<?php 
$p = array(0 => array()); 
foreach($nodes as $n) 
{ 
    $pid = $n['parent']; 
    $id = $n['comment_id']; 

    if (!isset($p[$pid])) 
    $p[$pid] = array('child' => array()); 

    if (isset($p[$id])) 
    $child = &$p[$id]['child']; 
    else 
    $child = array(); 

    $p[$id] = $n; 
    $p[$id]['child'] = &$child; 
    unset($p[$id]['parent']); 
    unset($child); 

    $p[$pid]['child'][] = &$p[$id];  
} 
$nodes = $p['0']['child']; 
unset($p); 
?> 
0

모든 노드에 "상위"관계를 저장하는 데이터베이스가 있습니다. 당신이 원하는 것은 그 표현을 표준 "트리"표현으로 변환하는 것입니다. 모델에 대한 자세한 이론은있는 당신은 당신의 데이터가 "의 TreeNode"라는 클래스 생성 : 다음

class TreeNode { 
    public $commendId; 
    public $arrChildren; 
} 

를 데이터베이스에서 얻은 배열을 반복 http://www.phpriot.com/articles/nested-trees-1 여기

는 당신이 그것을 할 수있는 방법 . 각 항목을 살펴보고 항목을 처리하고 있는지 TreeNodes를 만듭니다. 깊이 우선 또는 너비 우선 접근법을 사용하여 부모를 찾고 노드를 그것에 첨부 할 수 있습니다.