2010-02-02 6 views
-2

: 함수에서
$data[0][$row->parentid]['children'][$row->id] = $row->name다차원 배열 다음 줄의 의미는 무엇

:
$row->parentid or $row->name : 아이들에서 온 수행과의 의미는 무엇인가

function getCategoriesNav(){ 
    $data = array(); 

    $this->db->select('id,name,parentid'); 
    $this->db->where('status', 'active'); 
    $this->db->orderby('parentid','asc'); 
    $this->db->orderby('name','asc'); 
    $this->db->groupby('parentid,id'); 
    $Q = $this->db->get('categories'); 
    if ($Q->num_rows() > 0){ 
     foreach ($Q->result() as $row){ 
      if ($row->parentid > 0){ 
       $data[0][$row->parentid]['children'][$row->id] = $row->name; 
      } 
      else{ 
       $data[0][$row->id]['name'] = $row->name; 
      } 
     } 
    } 
    $Q->free_result(); 
    return $data; 
} 

?
테이블에 'children'필드가 없으며 어디에도 선언되지 않았습니다. 나는 명확하게 질문을 설명하지 않은 경우,

가 사전에 감사 Mehdy


업데이트

죄송합니다 도와주세요. 내 질문은이 함수의 다음 줄의 의미는 무엇입니까 $data[0][$row->parentid]['children'][$row->id] = $row->name,이 아이들의 출처 및 실제 의미는 $row->parentid 또는 $row->name입니까? 나는 내 테이블에 '아이들'이라는 필드가 없으며 어디에도 선언되어 있지 않습니다. 제발 도와주세요.

는 mehdy

+0

매우 혼란스러운 질문입니다. (심지어 질문입니까?) –

+0

@ mehdymahmood : 당신의 질문은 정확히 무엇입니까? –

+0

이것은 CodeIgniter 책에서 나온 것입니까? 아닙니다. – Zack

답변

1

코드를 읽어 주셔서 감사합니다. 카테고리의 행에 상위 ID가있는 경우 상위 ID의 children 요소 아래에 하위 ID가 배열에 추가됩니다. 이것은 단순히 결과 집합을 가져 와서 장소에서 반복을 제거하고 쉽게 탐색 할 수있는 계층 구조 데이터 구조로 변환하는 것입니다.

업데이트 :

특히, 일을 다음 코드 줄 것입니다 :

$data[0][$row->parentid]['children'][$row->id] = $row->name; 

함수는 쿼리 결과 집합 통해 반복과 현재 행이 부모의 ID를 지정하는 경우 확인하고 있습니다. 그것은 배열의 배열 (귀하의 계층 구조)에 해시를 추가 않습니다.

foreach ($Q->result() as $row) { 

쿼리 결과는 행 개체의 모음입니다. 각 개체는 SQL 쿼리에서 선택된 각 열에 대한 특성을 가지고있는 것으로 보입니다. 당신의 SELECT 필드 그래서 :

$this->db->select('id,name,parentid'); 

우리는이 :

$data[0][$row->parentid]['children'][$row->id] = $row->name; 
이 줄은이 같은 구조를 건설하고

:

$row->id 
$row->name 
$row->parentid 

코드의 원래 라인으로 돌아 간다
Array (
    [0] => Array (// $data[0] 
     [400] => Array (// $data[0][$row->parentid] 
      [children] => Array (// $data[0][$row->parentid]['children'] 
       [53] => Animal // these are from [$row->id] = $row->name; 
       [54] => Mineral 
       [55] => Vegetable 
      ) 
     ) 

     [401] => Array (
      [children] => Array (
       [4] => Wood 
       [6] => Metal 
       [2] => Plastic 
      ) 
     ) 
    ) 
) 

첫 번째 래퍼 배열 $data[0]을 제거하여이 구조를 약간 단순화 할 수 있습니다.그래서 당신과 같이 코드를 변경 것 :

$data[$row->parentid]['children'][$row->id] = $row->name; 

이 지금과 같은 구조를 변경합니다

Array (
    [400] => Array (// $data[$row->parentid] 
     [children] => Array (// $data[$row->parentid]['children'] 
      [53] => Animal // these are from [$row->id] = $row->name; 
      [54] => Mineral 
      [55] => Vegetable 
     ) 
    ) 

    [401] => Array (
     [children] => Array (
      [4] => Wood 
      [6] => Metal 
      [2] => Plastic 
     ) 
    ) 
) 

을 나는이 당신을 위해 코드를 명확히 바랍니다.

0

그것은 ID와 배열, 즉 $row->name을 값을 추가 $row->id

그래서 그 순간에 $row->parentid에있는 ID와 부모에게 자식 행을 추가하고 무엇을하지 않습니다. 루프를 반복하고 부모에게 자녀가있는 경우 부모에게 자식을 추가합니다.