Mal ein ganz anderer Ansatz (keine Ahnung, ob der gut geht):
- Du ersetzt vor dem Sortieren "(" durch ".("
- sortiert dann normal
- Du ersetzt nach dem Sortieren ".(" durch "("
Hallo Forum,
ich sitze an einem Problem, das ich nicht hinbekomme. Ich habe einen Array mit einer Dateiliste, in der auch gleichlautende Dateien vorkommen, die dann zur Unterscheidung nach dem Namen ein '...(2)' oder '...(3)' angehängt bekommen. Ich will diese Liste nun sortieren lassen, und zwar so, wie ich die Liste auch erstellen würde, nämlich mit:
1) dateiname.endung
2) dateiname(2).endung
3) dateiname(3).endung
Wie geht das? natsort kapiert nicht was ich will, da kommt die Liste immer so raus:
1) dateiname(2).endung
2) dateiname(3).endung
3) dateiname.endung
Ich probier auch schon mit einer cmp-Funktion für usort rum, die sieht im Moment so aus:
aber das reist es auch nicht raus. Hat jemand einen Tipp für mich? Das MUSS doch irgendwie gehen?PHP-Code:function cmp($a, $b) {
if ($a == $b) {
return 0;
}
if ((preg_match("#.*\([0-9]{1,}\).*#", $a)) && (preg_match("#.*\([0-9]{1,}\).*#", $b))) {
return (strcmp($a, $b) > 0) ? +1 : -1;
}
elseif (preg_match("#.*\([0-9]{1,}\).*#", $b)) {
return +1;
}
elseif (preg_match("#.*\([0-9]{1,}\).*#", $a)) {
return -1;
}
return (strcmp($a, $b) > 0) ? +1 : -1;
}
Liebe Grüße,
Basti
live long and prosper...
Mal ein ganz anderer Ansatz (keine Ahnung, ob der gut geht):
- Du ersetzt vor dem Sortieren "(" durch ".("
- sortiert dann normal
- Du ersetzt nach dem Sortieren ".(" durch "("
Grüße vom Griechen,
Cybergreek!
everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht
Hallo Cybergreek,
zu deinem Ansatz: nein, tut er nicht. Leider. Ich habe mir aber in der Zwischenzeit anders weitergeholfen und das gute alte "Bubblesort" hergenommen, das dem ein oder anderen vielleicht aus VBA bekannt sein dürfte - damit geht's
. Falls es jemand hilft:
live long and prosper...
...hmpf, fehlt ja noch was. He, Moment - wo ist der PHP-editor in dem Antwortenfenster jetzt?bin ich doof ...?
So, das wär's dannPHP-Code:protected function SortArray($arrArray, $Mode) {
$tmpArray = Array();
....
}
elseif ($Mode == "bubblesort") {
Do { /*Solange durch den Array loopen, bis keine "exchanges" mehr gemacht werden müssen*/
$NoExchanges = True;
For ($i=0;$i<(count($arrArray) - 2);$i++) { /*Jedes - bis auf das letzte - Element durchlaufen*/
#Wenn das Element größer als das folgende
#ist, die beiden miteinander tauschen
if ((is_string($arrArray[$i]) && is_string($arrArray[$i + 1]))) {
$comp = strcmp($arrArray[$i], $arrArray[$i + 1]);
}
else {
if ($arrArray[$i] > $arrArray[$i + 1]) {
$comp = -1;
}
elseif ($arrArray[$i] < $arrArray[$i + 1]) {
$comp = 1;
}
else {
$comp = 0;
}
}
If ($comp < 0) {
$NoExchanges = False;
$Temp = $arrArray[$i];
$arrArray[$i] = $arrArray[$i + 1];
$arrArray[$i + 1] = $Temp;
}
}
} While (!$NoExchanges);
return $arrArray;
}
...
}
live long and prosper...
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)