У меня есть большая таблица данных, извлеченная из моей базы данных (~ 1500 строк, каждая с 10-15 полями), и я делаю несколько фильтров и генерирую некоторые статистические данные и сохраняю их в электронной таблице Excel, чтобы пользователь мог скачать.
Вместо того, чтобы снова и снова попадать в базу данных с одним и тем же довольно сложным запросом с небольшими изменениями (к WHERE и ORDER BY), я совершаю одну поездку в БД, помещая результаты в один большой массив и затем используя array_filter
и array_multisort
, чтобы получить мои новые представления данных.
Я новичок в array_multisort
, поэтому я опубликую то, что я сделал здесь для критики.
// an numerical array of associative arrays
$records = $dbResult->convertToArray();
$fields = $dbResult->getFieldNames();
// this is run once at the start
$sortArr = array();
foreach ($fields as $field) $sortArr[$field] = array();
foreach ($records as $r) {
foreach ($r as $key => $value) {
$sortArr[$key][] = $value;
}
}
// and then to sort:
array_multisort(
$sortArr['Date Completed'], SORT_DESC,
$sortArr['Last Name'], SORT_ASC,
$sortArr['First Name'], SORT_ASC,
$sortArr['Course'], SORT_ASC,
$records
);
Это прекрасно работает, хотя первоначальное "копирование всего результата в другой массив" мне кажется странным. Проблема возникает, когда мне нужно снова отсортировать список. У меня такое ощущение, что мой $sortArr
должен синхронизироваться с массивом $records
, но он ломается после каждой сортировки.
Я даже не уверен, что это целевое использование array_multisort
, так что я могу быть далеко не в курсе. Кто-нибудь может дать какой-нибудь совет или совет? Как вы сортируете многомерные массивы?