php替换数组id键

时间:2012-07-28 01:40:36

标签: php mysql

我正在使用单个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 )  

2 个答案:

答案 0 :(得分: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[]不会生成任何通知/警告,但是当您尝试设置特定密钥时,如果变量尚未生成,则会生成通知/警告声明为数组。

答案 1 :(得分:1)

你可以这样做:

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

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