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 に答える