Mehrdimensionales Array sortieren
Julian von Mendel
- php
0 Tom
Hi!
Ich habe ein mehrdimensionales Array das so aufgebaut ist:
$array["b"]["prio"] = 3;
$array["a"]["prio"] = 1;
$array["c"]["prio"] = 2;
Ich möchte es nach "prio" sortieren, also folgendes Ergebnis erhalten:
$array["a"]["prio"] = 1;
$array["c"]["prio"] = 2;
$array["b"]["prio"] = 3;
Wie stelle ich das am besten an?
Schöne Grüße
Julian
Hello,
Ich habe ein mehrdimensionales Array das so aufgebaut ist:
$array["b"]["prio"] = 3;
$array["a"]["prio"] = 1;
$array["c"]["prio"] = 2;Ich möchte es nach "prio" sortieren, also folgendes Ergebnis erhalten:
$array["a"]["prio"] = 1;
$array["c"]["prio"] = 2;
$array["b"]["prio"] = 3;
Du hast und nur einen Teil des Arrays gezeigt.
$array["b"]["prio"] = 3;
['name'] = 'Mendel'
['vorname'] = 'Julian';
$array["a"]["prio"] = 1;
['name'] = 'Schmieder'
['vorname'] = 'Thomas';
$array["c"]["prio"] = 2;
['name'] = 'Paulsen'
['vorname'] = 'Paul';
Ich habe mir mal erlaubt, die mehdimensionale Struktur zu ergänzen.
Um das Ganze nun möglichst praktisch zu gestalten, müsstes Du mal erzählen, was denn a,b,c für eine Bedeutung haben. Wenn es sich dabei nämlich nur um den Elemente-Index des Arrays handeln sollte, der selber keine eigene Bedeutung hat, dann kann man das Array auch anders herum aufbauen. Das mag auf den ersten Blick verwirrend sein, da wir und ja eine hierarchische Gliederung anders herum vorstellen, aber es vereinfachtr Vieles.
$array["prio"]['b'] = 3;
["prio"]['a'] = 1;
["prio"]['c'] = 2;
$array['name']['b'] = 'Mendel'
['name']['a'] = 'Schmieder'
['name']['c'] = 'Paulsen'
$array['vorname']['b'] = 'Julian';
['vorname']['a'] = 'Thomas';
['vorname']['c'] = 'Paul';
Nun kannst Du jeden Zweig für sich sortieren.
Je nachden, nach welcher Soritierung U das Array nun durchlaufen willst, nimmst Du die Klasse (prio,name,vorname) ins Argunemt der foreach()-Schleife
foreach($array['prio'] as $key => $val)
{
echo "Priorität: ".$array['prio'][$key]."<br >"; # hier könnte nmna jetzt auch $val nehmen
echo "Vorname : ".$array['vorname'][$key]."<br >";
echo "Nachname : ".$array['nachname'][$key]."<br >";
}
Wie Du siehst, lässt sich ein solches Arra nun in Nullkommanix nach jeder Dimension sortiert ausgeben. Ich ahbe extra auf die Verwendung von $val in der Ausgabe verzichtet, weil der Ausgabeblock so allgemeingültig ist, und nur das Foreach-Argument getauscht werden muss.
Für die Harmonisierung der Instanzen-Multiplikatoren (a,b,c,...) musst Du natürlich sorgen.
Aber in einem Datensatz einer Tabelle fehlt ja auch nicht plötzlich ein Feld ;-)
Ich hoffe, dass Die diese Betrachtung irgendwann mal hilft.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
erstmal danke für deine ausführliche Antwort.
Du hast und nur einen Teil des Arrays gezeigt.
$array["b"]["prio"] = 3;
['name'] = 'Mendel'
['vorname'] = 'Julian';
$array["a"]["prio"] = 1;
['name'] = 'Schmieder'
['vorname'] = 'Thomas';
$array["c"]["prio"] = 2;
['name'] = 'Paulsen'
['vorname'] = 'Paul';
Ja, ich habe den Rest für unbedeutend gehalten. a, b und c sind die ID's der entsprechenden Personen. Jede Person hat dann wie du es ausgeführt hast einen Namen, Vornamen, eine Priorität und ein paar andere Daten. Nach der Priorität soll sortiert werden, der Bezug zu den ID's muss also erhalten bleiben.
$array["prio"]['b'] = 3;
["prio"]['a'] = 1;
["prio"]['c'] = 2;
Das ist leider nicht möglich, da es Personen geben kann die die selbe Priorität haben.
Schöne Grüße
Julian
Hello,
$array["b"]["prio"] = 3;
['name'] = 'Mendel'
['vorname'] = 'Julian';
$array["a"]["prio"] = 1;
['name'] = 'Schmieder'
['vorname'] = 'Thomas';
$array["c"]["prio"] = 2;
['name'] = 'Paulsen'
['vorname'] = 'Paul';Das ist leider nicht möglich, da es Personen geben kann die die selbe Priorität haben.
Eben drum ist es möglich. Aber eben nur dann, wenn a,b,c hier ein Synonym für eine Datensatznummer sind, also unique sind in jedem Zweig des Arrays. Die Zuordnung zu a,b,c bleibt ja beim Sortieren in jedem Fall erhalten.
Dank nochmal drüber nach. Ich habe damals auch recht lange gebraucht, den Vorteil in dieser Strukturierung zu erkennen.
Wenn a,b,c hier aber was anderes bedeuten sollen als einen Unique Index für die Datengruppe, dann frag eben einfach nochmal. Der Abend ist ja noch lang :-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
vielen Dank für deine Hilfe. Nach ewigem rumtun und einer Menge grauenvollem Code gehts.
Schöne Grüße
Julian