Gruppieren Sie 2D-Array-Daten mithilfe des Spaltenwerts, um ein 3D-Array zu erstellen
Lesezeit: 5 Minuten
n00b0101
Ich habe ein mehrdimensionales Array und versuche, sie nach dem Wert in einer bestimmten Spalte zu gruppieren.
Ich versuche, sie zu gruppieren level, aber ich werde das Niveau vorher nicht wirklich kennen. Es ist also nicht so, dass ich es in a stecken kann for Schleife und sage while $i < 7weil ich das nicht wissen werde 7 ist der maximale Wert für den Level-Schlüssel, und ehrlich gesagt bin ich mir nicht sicher, ob ich es so machen müsste, selbst wenn ich es täte.
Wenn Sie die Kontrolle über das Erstellen des anfänglichen Arrays haben, ist es am besten, die Dinge am Anfang so einzurichten, wenn Sie Einträge hinzufügen.
Wenn nicht, erstellen Sie ein temporäres Array zum Sortieren:
Hinterlässt das gewünschte Formular und alles zusammen referenziert.
Bauen Sie das Array von Anfang an so auf, wenn dies überhaupt möglich ist.
Ich verstehe den Vorteil der Herstellung nicht $entry eine Referenz.
– mickmackusa
10. Februar um 5:21 Uhr
@MickMackusa foreach erstellt unter bestimmten Umständen eine Kopie des Arrays, über das es iteriert. Die ausdrückliche Verwendung einer Referenz bedeutet, dass Sie sicher sein können, dass sie nicht kopiert, was ein riesiges Eingabearray sein könnte. Ich weiß nicht, ob diese Mikrooptimierung im Jahr 2023 relevant ist, die Welt war viel jünger, als ich diese Antwort ursprünglich geschrieben habe 🙂
– Mike
12. Februar um 12:49 Uhr
Gerhard Banasig
Sie müssen sie gruppieren eben Erste
Verwenden für jede Um in das Array zu schleifen, prüfen Sie, ob die Ebene mit dem vorherigen Element identisch ist, und gruppieren Sie es dann mit diesem Array
Ich denke, die ‘if’-Klausel in Ihrem obigen Code ist überflüssig, da die Zeile ” $grouparr[$val[‘level’]][$newkey]=$val; ” funktioniert für alle Fälle. Mit anderen Worten, diese Zeile gilt auch für den Fall, dass ‘$templevel’ gleich ‘$val’ ist[‘level’]’. In diesem Fall wäre der Code also einfach: $templevel=0; $newkey=0; foreach ($items als $key => $val) { $grouparr[$val[‘level’]][$newkey]=$val; $newkey++; } print($grouparr);
– Vasilis
28. Oktober 2020 um 10:40 Uhr
Hier ist die Lösung, auf die ich für ein identisches Problem gelandet bin, das als Funktion verpackt ist:
function arraySort($input,$sortkey){
foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val;
return $output;
}
Um $myarray nach dem Schlüssel namens “level” zu sortieren, tun Sie einfach Folgendes:
$myArray = arraySort($myArray,'level');
Oder wenn Sie es nicht als Funktion wollten, nur für eine einmalige Verwendung, würde dies $myNewArray aus $myArray erstellen, gruppiert nach dem Schlüssel ‘level’
foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;
das ist so eine nützliche Antwort. Ich versuche, dies zu verwenden, aber $val ist ein eindeutiger Wert. Vorschläge?
– zeichnete Schmaltz
22. April 2014 um 4:31 Uhr
Diese Antwort liefert nicht die gewünschte Ausgabe des OP, da die Subarray-Schlüssel nicht erhöht werden. Nachweisen: sandbox.onlinephpfunctions.com/code/…
– mickmackusa
24. August 2018 um 3:17 Uhr
function group_assoc($array, $key) {
$return = array();
foreach($array as $v) {
$return[$v[$key]][] = $v;
}
return $return;
}
//Group the requests by their account_id
$account_requests = group_assoc($requests, 'account_id');
Nur-Code-Antworten sind auf StackOverflow von geringem Wert, da sie das OP und zukünftige Forscher schlecht schulen – jede Antwort (auch grundlegende) sollte eine Art Erklärung darüber enthalten, wie die Lösung funktioniert und warum sie ratsam ist. Diese Antwort liefert NICHT die gewünschte Ausgabe, wie von der Frage vorgegeben, da sie die Subarray-Schlüssel nicht erhöht. Nachweisen: sandbox.onlinephpfunctions.com/code/…
Nur-Code-Antworten sind auf StackOverflow von geringem Wert, da sie das OP und zukünftige Forscher schlecht schulen – jede Antwort (auch grundlegende) sollte eine Art Erklärung darüber enthalten, wie die Lösung funktioniert und warum sie ratsam ist. Diese Antwort liefert NICHT die gewünschte Ausgabe, wie von der Frage vorgegeben, da sie die Subarray-Schlüssel nicht erhöht. Nachweisen: sandbox.onlinephpfunctions.com/code/…
– mickmackusa
24. August 2018 um 3:21 Uhr
mickmackusa
Um die exakte dessured-Ausgabe der Frage aus der Beispieleingabe zu generieren, ziehen/kopieren Sie den letzten Wert aus jeder Zeile und verwenden Sie diesen Wert als Gruppierungsschlüssel der ersten Ebene. Verwenden Sie dann den ursprünglichen Index der ersten Ebene als Schlüssel der zweiten Ebene. Schieben Sie dann die beiden verbleibenden Elemente in die Teilmenge der Gruppe.