2012-07-28 144 views
3

我正在使用單個mysql查詢爲嵌套結果(類別和子類別)創建多維數組。php替換陣列ID鍵

查詢

SELECT `categories`.`cat_title`, `subcategories`.`sub_cat_id`, `subcategories`.`sub_cat_title` 
FROM (`categories`) 
LEFT JOIN `subcategories` 
ON `subcategories`.`cat_id` = `categories`.`cat_id` 
ORDER BY `categories`.`cat_title 

創建多維陣列

$array = array(); 

foreach ($query->result_array() as $row): //query result as a pure array 
     $array[$row['cat_title']][] = $row['sub_cat_title']; 
endforeach; 

return $array; 

上述返回類別和與它們相應的子類別。

Array ( 
    [Art] => Array ([0] => Graphic Design [1] => Painting) 
    [Literature] => Array ([0] => Science Fiction [1] => Poetry [2] => Fiction) 
    [Science] => Array ([0] => Environmental) 
) 

是否有可能替換查詢數據數組鍵像子類別ID sub_cat_id

$array[ $row['cat_title'] ][ $row['sub_cat_id'] ] = $row['sub_cat_title']; 

但是,$array[$row['cat_title']]可能尚未設置,所以你應該事先添加此檢查:

if(!isset($array[$row['cat_title']])) { 
    $array[$row['cat_title']] = array(); 
} 

你原來例如

[Literature] => Array ([8] => Science Fiction [94] => Poetry [5] => Fiction) 

回答

2

是的,在循環設置代碼不需要此檢查,因爲$array[]不會生成任何通知/警告,但是當您嘗試設置特定的密鑰時,如果該變量尚未聲明,則會生成通知/警告紅色作爲數組。

+0

謝謝!這比我想象的容易!總是會設置'cat_title',而不是檢查類別是否存在子類別,如果存在則顯示它們。 – CyberJunkie 2012-07-28 01:53:25

+0

@Cyber​​Junkie - 這會工作!很高興我能幫助:) – nickb 2012-07-28 01:54:55

+0

輝煌!我花了很多時間試圖找出答案。 – CyberJunkie 2012-07-28 01:56:00

1

你可以做這樣的事情:

foreach($array as $key=>$val){ 
    unset($array[$key]); 
    $newKey = //New value 

    $array[$newKey] = $val]; 
}