Hallo Michael,
Okay, ich habe da einen Array der aus einzelnen Strings besteht. Nun möchte ich dieses Array nach Teilstrings sortieren.
Besipiel:
array('A122BB','A002BB','X666BB')
...
ich möchte es aber anhand der Zahlen in der Mitte sortieren, also:
A002BB, A122BB, X666BBKann mir dabei jemand helfen. Ich habe das Array auch schon aufgesplittet, konnte es dann aber nicht wieder richtig zusammensetzen.
Viel zu umständlich. Wie dir schon erklärt wurde, musst du lediglich eine Vergleichsfunktion
schreiben, deren Namen du dann der benutzerdefinierbaren Sortierfunktion usort() übergeben musst.
Die Vergleichsfunktion wird im PHP-Handbuch so beschrieben:
"Die Vergleichsfunktion muss einen Integer zurückgeben, der kleiner, gleich, oder größer ist
als NULL, wenn für das erste Argument auch angenommen wird, dass es kleiner, gleich, oder
größer ist als das zweite."
Umgesetzt ist das einfacher, als dieser Satz jetzt klingt. Wenn man Zahlen vergleicht, zieht
man einfach von $a den Parameter $b ab und gibt das Ergebnis zurück:
funktion vergleich($a, $b) {
return $a - $b;
}
Soll in umgekehrter Reihenfolge sortiert werden, vertauscht man einfach $a und $b (nach dem
return-Statement).
In deinem Fall musst du aus den zwei Array-Einträgen, die in $a und $b stehen, erst ganze
Zahlen (Integers) machen.
Dann kannst du sie auch voneinander abziehen. Du kannst jetzt mit strpos(), substr()
und den anderen Stringfunktionen von PHP versuchen, etwas zu basteln. Es geht aber auch
oft einfacher:
$rx = '/[^\d]+/';
$ersatz = '';
preg_replace($rx, $ersatz, $zeichenkette)
Das nimmt eine Zeichenkette und ersetzt alles, was keine Ziffer ist, durch "Nichts"
(eigentlich durch einen Leer-String). Der Rest ist dann eine Zahl, mit der PHP
rechnen kann.
Das Ganze sieht dann so aus:
$mein_array = array ('A122BB','A002BB','X666BB');
usort($mein_array, 'meine_vergleichsfunktion');
function meine_vergleichsfunktion(
$a,
$b
) {
static $rx = '/[^\d]+/';
static $ersatz = '';
return (integer) preg_replace($rx, $ersatz, $a) - (integer) preg_replace($rx, $ersatz, $b);
}
PHP-Handbuch mit weiteren Erläuterungen:
preg_replace()
Syntax der Perl-kompatiblen Regulären Ausdrücke (PCRE)
Weitere PCRE-Funktionen in PHP
MffG
EisFuX