Sortieren array von zwei Objekt-Eigenschaften, die über anonyme Funktion
Habe ich Folgendes array:
Array
(
[0] => stdClass Object
(
[timestamp] => 1
[id] => 10
)
[1] => stdClass Object
(
[timestamp] => 123
[id] => 1
)
[2] => stdClass Object
(
[timestamp] => 123
[id] => 2
)
)
Derzeit bin ich über folgende code sortiert das array nach der timestamp-Eigenschaft:
function sort_comments_by_timestamp(&$comments, $prop)
{
usort($comments, function($a, $b) use ($prop) {
return $a->$prop < $b->$prop ? 1 : -1;
});
}
Wie kann ich auch Sortieren, id id
absteigend, wenn timestamp ist der gleiche?
- Gibt es einen Grund, warum Sie nennen es
_by_timestamp
haben, sondern auch eine$prop
parameter? - andere als
I was doing some tests
und schlechte Namensgebung? Nein 🙂 es Schon behoben btw
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorschlag ist, senden Sie in einem array mit $Requisiten
Dann rufen Sie es mit
Wenn Sie wollen, dass es funktioniert mit X Anzahl der $Requisiten, können Sie eine Schleife innerhalb der usort immer den Vergleich zwischen einer Eigenschaft, die mit seiner vorherigen Eigenschaft im array wie dieses:
Prost!
Array to string conversion
Sie brauchen, um zu ersetzen Sie alle$a->$props[X]
zu$a->{$props[X]}
Den oben genannten Arten ersten durch den
$prop
parameter und dann Sekundär durchid
.Können Sie es mit ouzo goodies (ich weiß, du hast davon gehört :P).
Setzen Sie diese innerhalb der usort-Verschluss. Sie können auch loszuwerden, die $prop-argument und das
use ($prop)
Teil.Ich weiß, das ist ziemlich alte Frage aber finde nicht viel info für, wenn Sie wollen, Sortieren nach mehreren Eigenschaften ein bisschen wie mySQL ORDERBY tut so, hier ist eine Funktion aus einer persönlichen Rahmen
Option 1: order($key, $Richtung='asc'). $key ist eine Eigenschaft, die Objekte und $Richtung 'asc' oder 'desc'
Option 2: order(array($key => $Richtung, $key => $Richtung))
Dies ist ähnlich zu option 1, jedoch wenn 2 Objekte den gleichen Wert für $key, die zweite Sortieroption aus dem array übergeben wird, verwendet.
Diese Funktion, die mit mir gearbeitet! Die Antwort finden Sie unter: Sortieren SimpleXMLElement Object-arrays
strnatcmp
behandeln Sie diese ordnungsgemäß, insbesondere für string-Eigenschaften. Vergessen Sie auch nichtstrnatcasecmp
für die groß-und Kleinschreibung entspricht.Akzeptierte Antwort hat eine loop-Variante wird das nicht immer funktionieren.
obj1 prop1:foo, prop2: bar, prop3: test
obj2 prop1:foo, prop2: bar, prop3: apple
Bei $i = 1 der erste Vergleich wahr ist, und der als bar ist nicht weniger als eine bar, es wird -1 zurück, anstatt weiter mit der Schleife zu bewerten prop3.
Nur ein FYI.
Habe ich eine Variante, die nimmt auch Richtung, so dass jede Eigenschaft kann auch sortiert werden, indem Sie in aufsteigender oder absteigender Reihenfolge mit -1 und 1, beziehungsweise.
Sortierung nach beliebiger Anzahl von Kriterien. Ich vergesse immer, wenn $a - $b sortiert, aufsteigend oder absteigend. Justieren Sie, wie gebraucht.