3

我正在使用单个 mysql 查询为嵌套结果(类别和子类别)创建多维数组。

询问

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?例如

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

2 回答 2

2

是的,在循环中设置它:

$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();
}

您的原始代码不需要此检查,因为$array[]不会生成任何通知/警告,但是当您尝试设置特定键时,如果变量尚未声明为数组,则会生成通知/警告。

于 2012-07-28T01:44:08.280 回答
1

你可以这样做:

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

   $array[$newKey] = $val];
}
于 2012-07-28T01:45:43.107 回答