Wie kann ich dieses Array von Objekten nach einem seiner Felder sortieren, wie name
oder count
?
Array
(
[0] => stdClass Object
(
[ID] => 1
[name] => Mary Jane
[count] => 420
)
[1] => stdClass Object
(
[ID] => 2
[name] => Johnny
[count] => 234
)
[2] => stdClass Object
(
[ID] => 3
[name] => Kathy
[count] => 4354
)
....
Hier ist eine schönere Art, Verschlüsse zu verwenden
Bitte beachten Sie, dass dies nicht in der PHP-Dokumentation enthalten ist. Wenn Sie jedoch 5.3+ Schließungen verwenden, werden diese unterstützt, wenn aufrufbare Argumente angegeben werden können.
quelle
uasort()
-1 * strcmp($a->name, $b->name);
strcmp($b->name, $a->name)
usort
aber die Vergleichsfunktion ist dieselbe. Wenn Sie dies verwenden, müssen Sie den Code für den Abschluss duplizieren, anstatt eineprotected static
Methode aufzurufen, die Sie nur einmal in der übergeordneten Klasse definieren müssten.Wenn Sie ganzzahlige Werte sortieren möchten:
AKTUALISIERT mit der Zeichenfolge Vergessen Sie nicht, in dasselbe Register (oberes oder unteres) zu konvertieren.
quelle
Wenn Sie PHPOOP verwenden, müssen Sie möglicherweise Folgendes ändern:
quelle
Der gleiche Code wird mit dem
count
Feld sein.Weitere Details zu
usort
: http://ru2.php.net/usortÜbrigens, woher hast du das Array? Ich hoffe das nicht aus der Datenbank?
quelle
$result
wird enthalten,TRUE
wenn es erfolgreich ist, und Ihr Vergleich sollte sein$a->name > $b->name
. :)ORDER BY count
create_function('$a,$b', "return $a->count < $b->count;")
aber ich kann es nicht zum Laufen bringen :( Ich bekomme ein paar Hinweise und warne davor usort erwartet, dass Parameter 2 ein gültiger Rückruf istSie können diese Funktion verwenden (funktioniert in PHP Version> = 5.3):
Beispiel:
quelle
$a->{$key}
und$b->{$key}
eher als$a[$key]
und$b[$key]
wie wir es tun, streng genommen eher mit Eigenschaften als mit Array-Mitgliedern zu tun, aber dies war immer noch die Antwort, nach der ich gesucht habe.Sie können
usort
wie folgt verwenden:quelle
Wenn hier alles fehlschlägt, gibt es eine andere Lösung:
quelle
Der Nachteil aller Antworten hier ist, dass sie statische Feldnamen verwenden, daher habe ich eine angepasste Version im OOP-Stil geschrieben. Angenommen, Sie verwenden Getter-Methoden, könnten Sie diese Klasse direkt verwenden und den Feldnamen als Parameter verwenden . Wahrscheinlich findet es jemand nützlich.
quelle
wenn Sie Daten sortieren möchten
quelle
Eine einfache Alternative, mit der Sie das Feld, auf dem die Sortierung basiert, dynamisch bestimmen können:
Dies basiert auf der Closure-Klasse , die anonyme Funktionen zulässt. Es ist seit PHP 5.3 verfügbar.
quelle
Wenn Sie einen lokal basierten Zeichenfolgenvergleich benötigen, können Sie
strcoll
anstelle von verwendenstrcmp
.Denken Sie daran , dem ersten Gebrauch
setlocale
mitLC_COLLATE
zu Satz locale Informationen , wenn nötig.quelle
Wenn Sie dies in Codeigniter verwenden, können Sie die folgenden Methoden verwenden:
@rmooney danke für den Vorschlag. Es hilft mir wirklich.
quelle
Vielen Dank für die Inspirationen, ich musste auch einen externen $ translator-Parameter hinzufügen
quelle
Wenn Sie nur nach einem Feld sortieren müssen,
usort
ist dies eine gute Wahl. Die Lösung wird jedoch schnell unübersichtlich, wenn Sie nach mehreren Feldern sortieren müssen. In diesem Fall kann die YaLinqo- Bibliothek * verwendet werden, die eine SQL-ähnliche Abfragesyntax für Arrays und Objekte implementiert. Es hat eine hübsche Syntax für alle Fälle:Hier
'$v->count'
ist eine Abkürzung fürfunction ($v) { return $v->count; }
(entweder kann verwendet werden). Diese Methodenketten geben Iteratoren zurück, aber Sie können Arrays erhalten, indem Sie sie->toArray()
am Ende hinzufügen, wenn Sie sie benötigen.* von mir entwickelt
quelle
Sie können die sortierte Funktion von Nspl verwenden :
quelle
Das habe ich für eine Utility-Klasse
Nennen:
quelle
Sie können usort so verwenden
Wenn Sie nach Nummern sortieren möchten:
Oder Abc char:
Weitere Informationen: https://www.php.net/manual/en/function.usort.php
quelle