Я использую один запрос 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 )
Да, установите его в цикле:
$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[]
не будет генерировать никаких уведомлений / предупреждений, но при попытке установить конкретный ключ, который будет генерировать уведомление / предупреждение, если переменная еще не объявлена как массив ,
Вы могли бы сделать что-то вроде этого:
foreach($array as $key=>$val){ unset($array[$key]); $newKey = //New value $array[$newKey] = $val]; }
сforeach($array as $key=>$val){ unset($array[$key]); $newKey = //New value $array[$newKey] = $val]; }