tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
519
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ddhb ddhb ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    52
    also ich habe folgendes Array
    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'
    Ich will es aber so sortieren das es nacher folgende struktur hat:
    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'
    Also zuerst Beta dann RC und dann Final.

    Kann mir da jemand einen Denkanstoß geben?

    mfg
    ddhb
     

  2. #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:
    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($a02) == "Be") return "1" $a;
      if (
    substr($a02) == "RC") return "2" $a;
      if (
    substr($a02) == "Fi") return "3" $a;
      return 
    $a;
    }

    function 
    nachDemSortieren($a) {
      if (
    substr($a03) == "1Be") return substr($a1);
      if (
    substr($a03) == "2RC") return substr($a1);
      if (
    substr($a03) == "3Fi") return substr($a1);
      return 
    $a;
    }

    array_map("vorDemSortieren"$array);
    sort($array);
    array_map("nachDemSortieren"$array);

    echo 
    nl2br(print_r($arraytrue)); 
    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..

    Martin
     

  3. #3
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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.
     

  4. #4
    ddhb ddhb ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    52
    @Resalb
    Danke funktioniert.

    @hpvw
    hast du mal ein kleines Beispiel dazu, will mir die möglichkeit auch ansehen
    Geändert von ddhb (25.01.05 um 14:59 Uhr)
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Ein Beispiel, wie man es anwendet steht in der Hilfe.

    Eine Konkrete Compare-Funktion könnte (ungetestet) für Dein Problem so aussehen:
    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;
        }
        if(
    $aShort=="Beta") return -1;
        if(
    $bShort=="Beta") return 1;
        if(
    $aShort=="Final") return 1;
        if(
    $bShort=="Final") return -1;

    Den Vergleich kann man sicher noch vereinfachen.
    Vielleicht auch so:
    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;
        }
        
    //Wenn die Hauptkriterien unterschiedlich sind,
        //wird nach der oben angegebenen Sortierreihenfolge
        //sortiert.
        
    return ($order[$aShort] < $order[$bShort]) ? -1;

    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:
    $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"
    Mit Hilfe eines Parameters kann man sich dann entscheiden, nach welchem Kriterium (Index 2. Ebene) man $array sortiert.

    Ich hoffe, ich konnte Dir usort() etwas näher bringen.

    Gruß hpvw
     

Ähnliche Themen

  1. Wie komme ich zu meinem Wunsch-Design?
    Von kuhlmaehn im Forum Creative Lounge
    Antworten: 2
    Letzter Beitrag: 04.09.10, 13:34
  2. String-Array nach Int-Array sortieren
    Von Wolfy0013 im Forum Java
    Antworten: 5
    Letzter Beitrag: 06.05.10, 17:05
  3. Antworten: 5
    Letzter Beitrag: 24.09.08, 00:10
  4. Nach Array Key sortieren
    Von Kalma im Forum PHP
    Antworten: 12
    Letzter Beitrag: 27.08.08, 19:18
  5. Antworten: 1
    Letzter Beitrag: 08.01.03, 22:10