2010-07-28 5 views
2

내 제목이 혼란스러운 경우 사과드립니다. 카테고리 트리를 표시 목적 등전체 경로가없는 다차원 배열에 새 차원 추가

I에 대한 올바른 형식으로 사용할 수 있도록 내가 다차원 배열로를 얻기 위해 노력하고

ID, Name, Parent 
1, Cat1,  0 
2, Cat1_1, 1 
3, Cat1_2, 1 
4, Cat2,  0 
5, Cat2_1, 4 
6, Cat2_1_1, 5 

: 내가 이렇게 보이는 카테고리의 테이블이 카테고리 트리의 각 레벨을 클래스 변수에 쓰는 재귀 함수 (클래스 내부)를 작성하고 있습니다. 내 문제는 일단 내가 두 번째 레벨을 지나면, 클래스 category를 참조 할 수있는 능력이 느슨해져 현재 카테고리의 자식을 생성한다는 것이다.

예에 의한

... 나는 배열 경로의 문자열 표현을 얻을 수 있지만, 그때 나에게 배열의 정확한 수준에 대한 액세스 권한을 부여하는 평가를 할 수있는 방법이 있습니다 :

$path_string = "[4]['children'][5]['children']"; 

$ cat_path가 $ cat_path = $ cats. $ path_string이라고 말하면서 $ cat_path가 올바른 배열 수준을 가리킬 수있게 해주는 함수가 있습니까?

죄송합니다.이 모든 소리가 약간 혼란 스럽다면 죄송합니다. 또는 올바른 다차원 배열로 데이터를 가져 오는 더 좋은 방법을 아는 사람이라면 알려 주시기 바랍니다.

감사합니다.

+0

표 및 코드 형식을 편집했습니다. –

답변

0

경로를 내려갈 수있는 함수를 만들 수 있습니다. 예 :

function descend($array, $path) { 
    foreach ($path as $pathMember) { 
     if (!array_key_exists($array, $pathMember)) { 
      return null; 
     } 

     $array = $array[$pathMember]; 

     if (!array_key_exists($array, 'children')) { 
      // or throw 
      return null; 
     } 

     $array = $array['children']; 
    } 

    return $array; 
} 

$descended = descend($categories, array(4, 5)); 
-1

순수한 기능을 사용해보십시오.

귀하의 함수는 부모 ID를 받아들이고 어떤 자식 객체의 상태를 변경하지 않고 자식 배열을 반환해야합니다.

매우 혼란스럽지 않을 것입니다. (ID, 이름, 부모)와 평면 배열을 가정

0

:

$treearray = array(0 => array('children'=>array())); 
foreach($flatarray as $item){ 
    if(!isset($treearray[$item['id']])){ 
     $treearray[$item['id']] = array(); 
    } 
    $treearray[$item['id']] = array_merge($item,$treearray[$item['id']]); 
    if(!isset($treearray[$item['parent']]){ 
     $treearray[$item['parent']] = array('children'=>array()); 
    } 
    $treearray[$item['parent']]['children'][$item['id']] = &$treearray[$item['id']]; 
} 
print_r($treearray[0]); 

선택적으로, 당신은 또한 $treearray[$the_id_youre_interested_in]를 사용하여 어느 쪽이든 이동합니다 possiblity가를 작성, 항목의 그것에 부모의 참조를 만들 수 있습니다 다시 그 순간에 var_dump/print_r을 시도하지 마십시오. recursionfest deluxe.

관련 문제