【问题标题】:php replace array id keysphp替换数组id键
【发布时间】:2012-07-26 16:58:23
【问题描述】:

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

      【解决方案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 将始终设置,而不是我正在检查一个类别是否存在子类别,如果存在则显示它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2012-03-13
      • 2013-11-16
      相关资源
      最近更新 更多