PHP替换数组ID键

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


谢谢!这比我想象的要容易!cat_title将始终被设置,而我正在检查类别是否存在子类别,如果存在则显示它们。 - CyberJunkie

1
你可以像这样做:
foreach($array as $key=>$val){
   unset($array[$key]);
   $newKey = //New value

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接