ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
519
519
EMPFEHLEN
-
also ich habe folgendes Array
Ich will es aber so sortieren das es nacher folgende struktur hat:PHP-Code:$array=array();
$array[]='RC 1';
$array[]='RC 2';
$array[]='Final 1';
$array[]='Final 2';
$array[]='Beta 1';
$array[]='Beta 2';
$array[]='Beta 3';
Also zuerst Beta dann RC und dann Final.PHP-Code:$array=array();
$array[]='Beta 1';
$array[]='Beta 2';
$array[]='Beta 3';
$array[]='RC 1';
$array[]='RC 2';
$array[]='Final 1';
$array[]='Final 2';
Kann mir da jemand einen Denkanstoß geben?
mfg
ddhb
-
23.01.05 23:57 #2
- Registriert seit
- Mar 2004
- Ort
- Tiefste Provinz
- Beiträge
- 304
Wenn Du Dir sicher sein kannst, dass bei allen Einträgen am Anfang immer entwerde "Beta" oder "RC" oder "Final" dann kannst Du ein bischen pfuschen. Erst das Array durchgehen und vor jedes Beta eine 1, vor jedes RC eine 2 und vor jedes Final eine 3 schreiben, dann das Array sortieren, dann wieder durchgehen überall das erste Zeichen wieder weghauen:
Was einfacheres fällt mir auf die Schnelle nicht ein. Und wenn die oben erwähnten Voraussetzungen nicht gegeben sind, dann wird's eh komplizierte, fürchte ich..PHP-Code:$array = array("RC 2", "Final 3", "Beta 1", "Beta 3", "RC 1", "Final 1", "RC 3", "Final 2", "Beta 2");
function vorDemSortieren($a) {
if (substr($a, 0, 2) == "Be") return "1" . $a;
if (substr($a, 0, 2) == "RC") return "2" . $a;
if (substr($a, 0, 2) == "Fi") return "3" . $a;
return $a;
}
function nachDemSortieren($a) {
if (substr($a, 0, 3) == "1Be") return substr($a, 1);
if (substr($a, 0, 3) == "2RC") return substr($a, 1);
if (substr($a, 0, 3) == "3Fi") return substr($a, 1);
return $a;
}
array_map("vorDemSortieren", $array);
sort($array);
array_map("nachDemSortieren", $array);
echo nl2br(print_r($array, true));
Martin
-
usort() solltest Du Dir mal anschauen.
In der Vergleichsfunktion kannst Du zunächst den Anfang der Arrayelemente vergleichen und wenn dieses keinen Unterschied ergibt die beiden Strings direkt vergleichen.
-
@Resalb
Danke funktioniert.
@hpvw
hast du mal ein kleines Beispiel dazu, will mir die möglichkeit auch ansehenGeändert von ddhb (25.01.05 um 14:59 Uhr)
-
Ein Beispiel, wie man es anwendet steht in der Hilfe.
Eine Konkrete Compare-Funktion könnte (ungetestet) für Dein Problem so aussehen:
Den Vergleich kann man sicher noch vereinfachen.PHP-Code:function cmp ($a, $b) {
$aShort=arrays_shift(explode(" ",$a));
$bShort=arrays_shift(explode(" ",$b));
if ($aShort == $bShort) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
if($aShort=="Beta") return -1;
if($bShort=="Beta") return 1;
if($aShort=="Final") return 1;
if($bShort=="Final") return -1;
}
Vielleicht auch so:
Noch besser kann man usort() verwenden, wenn man zum Beispiel Arrays mit einzelnen Daten zu etwas hat (zum Beispiel ein Array, in dem Arrays hängen, die indiziert Informationen zu Dateien speichern, also Dateigröße, -name, etc).PHP-Code:function cmp ($a, $b) {
//Reihenfolge definieren:
$order=array();
$order['Beta']=1;
$order['RC']=2;
$order['Final']=3;
//String bis zum ersten Leerzeichen ermitteln
//(geht vielleicht auch einfacher)
$aShort=arrays_shift(explode(" ",$a));
$bShort=arrays_shift(explode(" ",$b));
//Wenn das Hauptkriterium gleich ist,
//muss der ganze String verglichen werden
if ($aShort == $bShort) {
if ($a==$b) return 0;
return ($a < $b) ? -1 : 1;
}
//Wenn die Hauptkriterien unterschiedlich sind,
//wird nach der oben angegebenen Sortierreihenfolge
//sortiert.
return ($order[$aShort] < $order[$bShort]) ? -1 : 1;
}
Mit Hilfe eines Parameters kann man sich dann entscheiden, nach welchem Kriterium (Index 2. Ebene) man $array sortiert.PHP-Code:$array[0]['name']="datei1.txt";
$array[0]['size']="102";
$array[0]['changedate']="2005-01-10 18:23:10";
$array[1]['name']="datei2.txt";
$array[1]['size']="52";
$array[1]['changedate']="2004-12-31 15:45:07";
Ich hoffe, ich konnte Dir usort() etwas näher bringen.
Gruß hpvw
Ähnliche Themen
-
Wie komme ich zu meinem Wunsch-Design?
Von kuhlmaehn im Forum Creative LoungeAntworten: 2Letzter Beitrag: 04.09.10, 13:34 -
String-Array nach Int-Array sortieren
Von Wolfy0013 im Forum JavaAntworten: 5Letzter Beitrag: 06.05.10, 17:05 -
Array sortieren nach leeren Elementen sortieren, Reihenfolge beibehalten
Von trench140 im Forum PHPAntworten: 5Letzter Beitrag: 24.09.08, 00:10 -
Nach Array Key sortieren
Von Kalma im Forum PHPAntworten: 12Letzter Beitrag: 27.08.08, 19:18 -
2d Array sortieren $array[name][0] sortieren nach [name]
Von Mr. FISHMAN im Forum PHPAntworten: 1Letzter Beitrag: 08.01.03, 22:10





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren