2010-02-02 144 views
-2

什麼是以下行的含義:
$data[0][$row->parentid]['children'][$row->id] = $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; 
} 

哪裏的孩子從哪裏來,是什麼意思:
$row->parentid or $row->name
我的桌子上沒有任何字段'子女',並且沒有在任何地方聲明。請幫助

謝謝你在前進, Mehdy


更新

很抱歉,如果我沒有解釋清楚的問題。我的問題是:在這個函數中下面這行的含義是什麼 $data[0][$row->parentid]['children'][$row->id] = $row->name,這個孩子從哪裏來,以及什麼實際的意思是$row->parentid$row->name?我的桌子上沒有任何領域的「孩子」,它沒有在任何地方宣佈,請幫助我。

謝謝 mehdy

+0

非常令人困惑的問題。 (它甚至是一個問題?) – 2010-02-02 06:43:06

+0

@mehdymahmood:你的問題到底是什麼? – 2010-02-02 06:50:26

+0

這是來自CodeIgniter的書,不是嗎? – Zack 2010-02-02 18:24:26

回答

1

閱讀的代碼。如果來自類別的行具有父級ID,則將子級ID添加到父級ID爲children元素下的陣列。這只是取結果集並將其轉換爲層次結構數據結構,該結構消除了地點的重複並使其更易於遍歷。

更新:

具體來說,什麼是下面的代碼行做:

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

你的功能是通過您的查詢結果集進行循環並檢查當前行指定父ID。如果是這樣,它會爲您的數組數組(您的層次結構)附加一個哈希值。

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

您的查詢結果是行對象的集合。每個對象似乎都有一個屬性,用於在SQL查詢中選擇每個列。因此,對於你SELECT領域:

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

我們:

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

再回到原來的代碼行:

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

這條線正在建設這樣的結構:

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

它一個數組中添加值即$row->name與ID $row->id

所以它做什麼,正在添加子行父與在$row->parentid在那一刻的ID。它通過循環循環,如果父母有孩子,則將孩子添加到父母。