データベースから取得した大量のデータテーブル(最大1500行、それぞれ10〜15フィールド)があり、いくつかのフィルターを実行していくつかの統計を生成し、ユーザーがダウンロードできるようにこれらをExcelスプレッドシートに保存しています。
(WHEREとORDER BYに)わずかな変更を加えるだけで、同じかなり複雑なクエリでデータベースに何度もアクセスするのではなく、DBに1回アクセスし、結果を1つの大きな配列に入れて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
。そのため、ここでは軌道から外れている可能性があります。誰かがアドバイスやヒントを与えることができますか?多次元配列をどのように並べ替えますか?