Array nach Teilstring durchsuchen
Michael
- php
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')
Ausgegeben sieht es ja dann so aus:
A122BB, A002BB, X666BB
ich möchte es aber anhand der Zahlen in der Mitte sortieren, also:
A002BB, A122BB, X666BB
Kann mir dabei jemand helfen. Ich habe das Array auch schon aufgesplittet, konnte es dann aber nicht wieder richtig zusammensetzen.
Danke!
Hello,
Wieviele "Dimensionen" hat das Array?
Kommst Du mit Rekursion klar?
Kennst Du die Funktion http://www.php.net/manual/en/function.substr.php ?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Wieviele "Dimensionen" hat das Array?
Kommst Du mit Rekursion klar?Kennst Du die Funktion http://www.php.net/manual/en/function.substr.php ?
Harzliche Grüße vom Berg
http://www.annerschbarrich.deTom
Das Array ist eindimensional und substr kenne ich damit habe ich auch schon gearbeitet. Ich habe den wichtigen Teil, d.h. die Zahlen auch schon extrahiert, aber ich kann die einzelnen Teile dann nicht wieder richtig zusammensetzen.
echo $begrüßung;
Das Array ist eindimensional und substr kenne ich damit habe ich auch schon gearbeitet. Ich habe den wichtigen Teil, d.h. die Zahlen auch schon extrahiert, aber ich kann die einzelnen Teile dann nicht wieder richtig zusammensetzen.
Sortiere es mit einer userdefinierten Vergleichsfunktion: usort() oder ggf. uasort(). Deine Vergleichsfunktion muss aus den übergebenen zwei Werten den gewünschten Teil extrahieren, diese Teile vergleichen und das Ergebnis zurückliefern. Den Rest macht PHP.
echo "$verabschiedung $name";
Hello,
Guck mal hier nach einem passenden Befehl.
Warte! Warte! Wenn du noch detailiertere Hilfe gibst, muß Michael letztendlich gar nichts mehr selber machen.
Setz doch lieber einen Link auf Google, dann freut sich auch Frank.
*hups*
Im ersten Moment dacht ich, mein forumseigener Mobber würde jetzt frendgehen *igitt*
Aber dann sprang mein Detektor doch noch an.
Und wenn ich das richtig sehe, kugele ich mich in 10 Minuten auch noch auf dem Fußboden :-)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
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