У меня есть большая таблица данных, вытащенная из моей базы данных (~ 1500 строк, каждая с 10-15 полями), и я делаю несколько фильтров и генерирую некоторую статистику и сохраняя их в электронной таблице Excel для загрузки пользователем ,Использование array_multisort в том же массиве несколько раз?
Вместо того, чтобы сбрасывать базу данных с помощью такого же сложного запроса снова и снова с незначительными изменениями (для 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
, так что я могу быть в стороне от трека здесь. Может ли кто-нибудь дать совет или советы? Как сделать вы сортировать многомерные массивы?