Sortieren eines Arrays von Objekten nach Datum
In PHP stoßen wir oft auf die Notwendigkeit, ein Array von Objekten nach einer bestimmten Eigenschaft zu sortieren, beispielsweise ein Datumsfeld. Dadurch können wir unsere Daten in chronologischer Reihenfolge anzeigen oder bearbeiten.
Objekte nach Datum neu anordnen
Betrachten Sie das folgende Array von Objekten, wobei jedes Objekt einen Datensatz mit a darstellt Datumseigenschaft:
$array = [
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
];
Um diese Objekte nach ihrer Datumseigenschaft in aufsteigender Reihenfolge (älteste zuerst) zu sortieren, können wir die Funktion strtotime() und die Funktion usort() verwenden.
Benutzerdefinierter Vergleich Funktion
Um usort() zu verwenden, müssen wir eine benutzerdefinierte Vergleichsfunktion definieren, die zwei Objekte basierend auf ihrer Datumseigenschaft vergleicht. Der folgende Code definiert eine Funktion, die den Zeitstempel (konvertiert mit strtotime()) des Datums des ersten Objekts vom Zeitstempel des Datums des zweiten Objekts subtrahiert:
function cb($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
}
Sortieren des Arrays mit usort()
Sobald wir unsere Vergleichsfunktion haben, können wir usort() für das Array aufrufen und die Vergleichsfunktion als übergeben zweites Argument:
usort($array, 'cb');
Beispiel
Bei Verwendung des Beispiel-Arrays von zuvor wäre das resultierende sortierte Array:
[
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
]
PHP 5.3 und höher
Für PHP 5.3 und höher kann eine einfachere anonyme Funktion als Vergleichsfunktion verwendet werden:
usort($array, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
Dieser Ansatz erzielt das gleiche Sortierergebnis wie der vorherige.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3