2013-04-30 2 views
1

Im는 PHP에서 프로젝트를하고 있습니다. CodeIgniter는 모든 attributes_values를 유지할 수있는 테이블을 가지고 있으며 동일한 tbl에 자식을 가질 수 있도록 설계되었습니다. 데이터베이스 구조는 속성의 속성 값 ATT-1 상기 여기PHP에서 재귀

fld_id fld_value fld_attribute_id fld_parent_id 
    1  att-1   2      0 
    2  att-2   2      0 
    3  att-1_1   2      1 
    4  att-1_2   2      1 
    5  att-1_1_1  2      3 

되어 있으며 두 개의 하위 ATT-1_1 및 ATT-1_2 상위 ID 1과 ATT-1_1와도 자식 att-를 있음 1_1_1 with parent_id 3. fld_parent_id는 동일한 테이블의 fld_id이며 해당 테이블의 하위를 나타냅니다. 이제 나는이

Level1 level2 level3 ..... level n 
att-1 
    +------att-1_1 
    |   +------att-1_1_1 
    +------att-1_2 
att-2 

같은 트리 구조로이 보여주고 싶은이 트리 구조는 n 개의 레벨 최대 개까지 다양 할 수있다. 부모 ID를 가진 속성 값은 레벨 1에 있고 레벨 1에서 값을 추출 했으므로 이제 그 아이를 검사해야하고 더 이상 자식이 있고 위와 같이 자식을 표시해야합니다. 도우미를 사용하여 재귀 적으로 사용하는 데 피곤감을 느낄 수는 있지만 실제로 발생하지는 않습니다. 그래서 내가 어떻게 할 수있는이 같은 : 코드

foreach($attributes_values->result() as $attribute_values){ 
       if($attribute_values->fld_parent_id==0 && $attribute_values->fld_attribute_id==$attribute->fld_id){ 
        echo $attribute_values->fld_value.'<br/>'; 
        $children = get_children_by_par_id($attribute_values->fld_id); //helper function 
        echo '<pre>'; 
        print_r($children); 
        echo '</pre>'; 
       } 
      } 

이하 및 도우미 코드는 다음과 같습니다 :

function get_children_by_par_id($id){ //parent id 
    $children = get_children($id); 
    if($children->num_rows()!=0){ 
     foreach($children->result() as $child){ 
      get_children_by_par_id($child->fld_id); 
      return $child; 
     } 
    } 
} 
function get_children($id){ 
    $CI = get_instance(); 
    $CI->db->where('fld_parent_id',$id); 
    return $CI->db->get('tbl_attribute_values'); 
} 

저를 도와주세요 ..............

답변

1

재귀 키는 "끝이없는"호출입니다. 이것은 self라고 부르는 함수로 할 수 있습니다.

그래서

function get_children($parent_id) 
{ 
    // database retrieve all stuff with the parent id. 
    $children = Array(); 

    foreach($results as $result) 
    { 
     $result['children'] = get_children($result['id']); 
     $children[] = $result; 
    } 
    return $children; 
} 
+0

'$ 결과 [ '아이들'] = get_children 사용 ($ 결과 [ 'ID가])'이 오류는이 주어진다 line "stdClass 유형의 객체를 배열로 사용할 수 없습니다." – Robz

+0

그러면 응답이 stdclass입니다. 코드는 $ result-> children = get_children ($ result-> id)로 바뀌어야합니다. – MKroeders

+0

코드는 완전히 나를 위해 작동하지 않았지만 당신이 나를 도왔던 방식으로 효과가있었습니다. 나는 특정 변화를했고 그것은 나를 위해 일했다. .. thanks – Robz

관련 문제