multiple array sortieren
muhlba91
- php
0 jobo0 muhlba910 Sven Rautenberg0 Bademeister0 suit
1 Sven Rautenberg0 Hopsel
Hallo!
Hoffe mir kann hier jemand helfen...
Zuerst einmal mein Array: (sieht z.B. so aus)
$array[0]["name"]="test";
$array[0]["datum"]="10.1.2010";
$array[1]["name"]="test1";
$array[1]["datum"]="10.1.2009";
$array[2]["name"]="test2";
$array[2]["datum"]="10.1.2011";
Nun möchte ich das Array nach dem Index Datum (also vom neuesten zum ältesten) sortieren.
Spezifisch geht es um einen Ordner, in dem mehrere Projekt-Ordner sind, in denen eine description.txt ist, wo das Beginndatum festgelegt ist. (Auslesen funktioniert alles wunderbar, nur eben nicht das sortieren!).
Sortiere ich mit sort, rsort, natsort verwendet er immer den Index name (egal ob ich name oder datum zuerst deklariert habe).
LG Daniel
Hallo,
eventuell mit multisort. kann sein, dass du aber vorher das array "zerlegen" musst $datum[0], $name[0] etc.pp.
Gruß
jobo
Hallo,
eventuell mit multisort. kann sein, dass du aber vorher das array "zerlegen" musst $datum[0], $name[0] etc.pp.
Gruß
jobo
Danke, daran habe ich auch schon gedacht, aber wenn ich das Array vorher zerlege, dann habe ich 2 verschiedene und wie finde ich dann den richtigen Namen zu einem Datum?
Hallo,
nach dem key.
foreach ($datum as $key => $value) {
echo $name[$key];
$result[$key]["datum"] = $value;
$result[$key]["name"] = $name[$key];
}
ungetestet.
Gruß
jobo
hallo,
du kannst aber auch ein sort-arry extrahieren und dass unter beibehaltung der keys sortieren.
Gruß
jobo
hallo,
du kannst aber auch ein sort-arry extrahieren und dass unter beibehaltung der keys sortieren.
Gruß
jobo
danke, werde es probieren sobald ich etwas zeit habe!
Moin!
eventuell mit multisort. kann sein, dass du aber vorher das array "zerlegen" musst $datum[0], $name[0] etc.pp.
Nein, array_multisort ist in fast allen Fällen der falsche Ansatz. Dass diese Funktion existiert, ist löblich für PHP, aber ich habe sie bei allen bisher in diesem Forum aufgetretenen Sortierungsfragen noch nie anwenden müssen. Immer gab es eine deutlich leichter anwendbare Methode.
- Sven Rautenberg
Hi Sven.
Ergaenzend:
Ob array_multisort oder usort kann man sich ceteris paribus nicht aussuchen[1], weil die Funktionen (im Hinblick auf ein Array von Arrays) voellig unterschiedliche Einsatzzwecke haben. usort sortiert das eigentliche Array, waehrend array_multisort die Moeglichkeit liefert, simultan dessen Eintraege (, die Arrays sind,) zu sortieren. Daher wuerde ich
Nein, array_multisort ist in fast allen Fällen der falsche Ansatz.
eher so formulieren:
"In fast allen Faellen, in denen array_multisort der richtige Ansatz ist, ist die Datenstruktur schlecht gewaehlt."
Als Faustregel schlage ich vor: "array_multisort ist Mist." Da kommen wir dann auf einen Nenner :-)
[1] ausser man versteht unter array_multisort "Array umschreiben, array_multisort anwenden, Array wieder zurueck umschreiben." Das waere eine Alternative zu usort - dazu verweise ich hierauf ;-)
Viele Gruesse,
der Bademeister
"In fast allen Faellen, in denen array_multisort der richtige Ansatz ist, ist die Datenstruktur schlecht gewaehlt."
Einer der "fast" Fälle ist z.B. Wenn das Array aus einer Datenbank kommt, wo man fast zwangsläufig eine "falsche" Struktur hat :) Hier kann man aber fast nichts anders machen als die Daten umkrempeln.
Moin!
Sortiere ich mit sort, rsort, natsort verwendet er immer den Index name (egal ob ich name oder datum zuerst deklariert habe).
usort() mit einer Vergleichsfunktion, die $a['datum'] mit $b['datum'] vergleicht. Siehe auch das zweite Beispiel der Doku.
- Sven Rautenberg
Hi muhlba91!
Zuerst einmal mein Array: (sieht z.B. so aus)
$array[0]["name"]="test";
$array[0]["datum"]="10.1.2010";
$array[1]["name"]="test1";
$array[1]["datum"]="10.1.2009";
$array[2]["name"]="test2";
$array[2]["datum"]="10.1.2011";
Lösungsansätze hast du ja schon bekommen.
Ich habe auch noch einen:
Sind "name" oder "datum" eventuell eindeutig, also kommt einer der beiden Werte immer nur genau einmal vor? Ich vermute mal der Projektname könne dieses Kriterium erfüllen.
Dann kannst du das Array so anlegen, dass die Schlüssel den Projektnamen und die Werte das Datum in einer sortierbaren Form (Wichtig!) enthalten.
Die Sortierung mit asort (aufsteigend) oder arsort (absteigend) ist dann ein Kinderspiel.
Nun möchte ich das Array nach dem Index Datum (also vom neuesten zum ältesten) sortieren.
Dann also absteigend. =)
MfG H☼psel