Wie zu Sortieren, mehrdimensionales Array nach Wert?
Wie kann ich Sortiere dieses array nach dem Wert des "bestellen" - Taste? Auch wenn die Werte aktuell sind sequentielle, Sie werden nicht immer sein.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
Cross-Linked: Referenz: alle grundlegenden Möglichkeiten, um zu Sortieren von arrays und Daten in PHP
InformationsquelleAutor stef | 2010-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, eine usort, Wenn Sie sind immer noch auf PHP 5.2 oder früher, müssen Sie definieren eine Sortierfunktion erste:
Ab PHP 5.3 können Sie eine anonyme Funktion:
Und schließlich mit PHP 7 können Sie die Raumschiff-operator:
Erweitert werden, um multi-dimensionale Sortierung, auf die zweite/Dritte Sortierung von Elementen, wenn der erste null ist - am besten unten erklärt. Sie können auch diese für die Sortierung auf die sub-Elemente.
Wenn Sie brauchen, zu behalten-Taste, Verbände, verwenden Sie
uasort()
- siehe Vergleich der array-Sortier-Funktionen in der AnleitungMan kann nicht wirklich sehen, die meisten der Arbeit, die PHP unterstützt. Es nimmt der Reihe und beginnt mit zwei Elementen, welche es ging, um diese benutzerdefinierte Funktion. Ihre Funktion ist dann dafür verantwortlich, Sie zu vergleichen: Wenn das erste element größer ist als das zweite, die Rückkehr eine positive ganze Zahl, wenn es kleiner ist, eine negative Rendite. Wenn Sie equel, 0 zurückgeben. PHP sendet anschließend zwei andere Elemente auf Ihre Funktion und wird dies auch weiterhin tun, bis das array sortiert wurde. Die Funktion hier ist sehr kurz, es könnte viel komplizierter sein, wenn Sie nicht vergleichen, zahlen.
Protip: verwenden Sie
uasort()
wenn Sie wollen erhalten die array-Schlüssel.Seien Sie vorsichtig, wenn die zu sortierenden Werte sind Dezimalzahlen. Wenn die Sortier-Funktion ist $a=1 und $b=0.1, der Unterschied ist 0.9, aber die Funktion gibt ein int, in diesem Fall 0, also $a und $b als gleich betrachtet werden, und falsch sortiert. Es ist mehr zuverlässig zu vergleichen, wenn $a größer als $b oder gleich und Rückgabe von -1, 1 oder 0 entsprechend.
Es dauerte eine Weile, um das herauszufinden. Zum Sortieren der umgekehrten Reihenfolge (DESC), kann man den Schalter $a und $b ist. Also $b['order'] - $a['order']
InformationsquelleAutor Christian Studer
sicher, dude ich bin überprüfung zu. Gestern hätte ein schwieriger Tag im Büro, wenn ich nicht finden, diese Frage 🙂
hmm cant fügen Sie eine Antwort.. gut ich es hier coz ich brauche diese dummen Punkte: also für eine mehrdimensionale Art seiner (fast) die gleiche Sache (srry Sie kopieren, einfügen und formatieren): Funktion aasort (&$array, $key1, $key2, $key3) { $sorter=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $sorter[$ii]=getPrice($va[$key1][$key2][$key3]); } arsort($sorter); foreach ($sorter as $ii => $va) { $ret[$ii]=$array[$ii]; } $array=$ret; }
Viel leichter zu übernehmen als obige Antwort
Funktioniert hervorragend für PHP-5.9
InformationsquelleAutor o0'.
Verwende ich diese Funktion :
Eine alternative, die unterstützt Sortieren Richtungen und viele zusätzliche features, möchten Sie vielleicht werfen Sie einen Blick auf meine Antwort -- es hat auch den Vorteil, dass es nicht
array_multisort
und muss daher nicht preallocate$sort_col
spart so Zeit und Speicherplatz.also das array wird per Referenz übergeben und können geändert werden, indem die Funktion, als vielmehr die Funktion erhalten, eine Kopie
dies funktioniert mit float-Spalte, zu
das array wird per Referenz übergeben, es wird so ändern Sie die bestanden-array anstelle der Rückgabe eine sortierte Kopie
InformationsquelleAutor Tom Haigh
Normalerweise verwende ich usort, und an meinem eigenen Vergleich-Funktion. In diesem Fall ist es ganz einfach:
Ich bekomme immer das falsche. Lassen Sie mich denken, aus der Anleitung: der return-Wert muss kleiner sein als null, wenn das erste argument wird als kleiner als der zweite. Also, wenn
$a['order']
3 und$b['order']
6 ist, werde ich wieder auf -3. Richtig?Gut, kehren Sie b - a, also wird es 3. Und dadurch falsch sortiert.
Ah. OK. Ich war mit nicht-logische, arithmetische, wo die Idee in Ihrem Kopf, nicht mit den Worten, die Sie produzieren. Dies ist, studiert meist an Freitag Nachmittagen.
in einigen Fällen obige Antwort ist die Rückkehr Falsches Ergebnis.. Verweis stackoverflow.com/questions/50636981/...
InformationsquelleAutor Jan Fabry
Ein Ansatz um dies zu erreichen, wäre, wie dieser
Ergebnis:
$result
vonarray_multisort
zurücktrue|false
verwenden Sievar_dump($new)
zum anzeigen der sortierten array.InformationsquelleAutor ajuchacko91
Dieser kümmert sich sowohl in groß-und Kleinschreibung Alphabete.
InformationsquelleAutor Nitrodbz
Sortiert das array nach dem Wert des "title" - Taste verwenden:
strcmp vergleichen die Zeichenfolgen.
uasort() unterhält die array-Schlüssel, wie Sie definiert wurden.
InformationsquelleAutor B.K
Den flexibelsten Ansatz wäre mit dieser Methode
ist hier, warum:
Können Sie Sortieren, indem Sie eine beliebige Taste (auch verschachtelt wie
'key1.key2.key3'
oder['k1', 'k2', 'k3']
)Funktioniert sowohl auf assoziative und nicht-assoziative arrays (
$assoc
flag)Nicht verwendet Referenz - return new array sortiert
In Ihrem Fall, es wäre so einfach wie:
Diese Methode ist ein Teil der diese Bibliothek.
InformationsquelleAutor Minwork
Let ' s face it: php muss NICHT eine einfache out-of-the-box-Funktion ordnungsgemäß behandelt jedes array Sortieren Szenario.
Diese routine ist intuitiv, das bedeutet eine schnellere Fehlersuche und Wartung:
Eigentlich PHP hat eine Menge von Funktionen sortiert, die verwendet werden kann, so behandeln Sie jedes array-sort-Szenario.
Mit Bezug auf debugging und Wartung, die Verwendung von
global
ist eine riesige rote fahne, und ist allgemein abgeraten. Warum istmysql_fetch_array
exemplarisch für diese Frage statt der OP-source-array, und es gibt keine Erklärung, was der code tun und was kann man erwarten, dass das Ergebnis sein? Insgesamt ist dies ein sehr komplexer Ansatz, der bei der Erreichung der gewünschten Ende führen.wenn Sie einen besseren Vorschlag, um dies zu erreichen, wenden Sie sich bitte beraten. TKS!!!!
Ich bin nicht in der Lage zu bestimmen, was Ihre erwarteten Ergebnisse sind aus Ihrer Antwort, und das die OP ' s dataset. Es mag offensichtlich sein, aber ich weiß nicht, wie Ihre Antwort beantwortet die OP ' s Frage. Sie können jedoch die pass-by-reference statt mit
global
finden Sie unter: 3v4l.org/FEeFC Dies erzeugt eine explizit definierte variable, sondern als eine, die geändert werden können und weltweit zugänglich sind.InformationsquelleAutor tony gil