Michael: Array nach Teilstring durchsuchen

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!

  1. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. 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

      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.

      1. 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";

  2. Hallo,

    Guck mal hier nach einem passenden Befehl.

    gruß aus Hosena

    1. Tach.

      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.

      --
      Once is a mistake, twice is jazz.
      1. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

      2. Hallo,

        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.

        Stimmt eigentlich, werd ich mir merken.

        gruß aus Hosena

  3. 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, X666BB

    Kann 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