Ich habe eine largish Tabelle von Daten aus meiner Datenbank (~ 1500 Zeilen, jede mit 10-15 Felder) gezogen und ich tue eine Reihe von Filtern und einige Statistiken zu generieren und speichern diese in einer Excel-Tabelle für den Benutzer zum Download.
Anstatt die Datenbank mit der gleichen ziemlich komplizierten Abfrage immer und immer wieder mit nur geringfügigen Änderungen (an der WHERE und ORDER BY) zu treffen, mache ich eine Reise zur DB, die Ergebnisse in ein großes Array und dann mit array_filter
y array_multisort
um meine neuen Ansichten der Daten zu erhalten.
Ich bin neu bei array_multisort
also werde ich das, was ich gemacht habe, hier veröffentlichen, um Kritik zu üben.
// 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
);
Das funktioniert gut, obwohl mir das anfängliche "Kopieren des gesamten Ergebnisses in ein anderes Array" seltsam vorkommt. Das Problem tritt auf, wenn ich die Liste erneut sortieren muss. Ich habe das Gefühl, dass meine $sortArr
muss synchron bleiben mit dem $records
Array, sondern dass es nach jeder Sortierung unterbrochen wird.
Ich bin mir nicht einmal sicher, ob dies die beabsichtigte Verwendung von array_multisort
Ich könnte hier also völlig daneben liegen. Kann mir jemand einen Rat oder Tipps geben? Wie geht usted mehrdimensionale Arrays sortieren?