Thomas: Sortierreihenfolge!!!

Hi!
<?
$zeit[1]=10.35;
$zeit[2]=10.40;

natsort($zeit);

foreach ($zeit as $value) { //D

echo $value."<br>";

}
?>

Dieser Code gibt folgendes aus:
10.4
10.35

Dies soll er aber nicht, sondern er soll diese Zeiten sortieren, dass heißt, 10.35 als erstes (ist ja am schnellsten) und dann erst 10.4 (ist ja in Wirklichkeit 10.40 und damit langsamer)

Wie bringe ich dies PHP bei??

Thomas

  1. Hallo Thomas!

    Ein Blick in die PHP Hilfe hätte Dir schneller ein Ergbenis gebracht als diesen Eintrag hier zu schreiben.

    http://de2.php.net/manual/de/function.sort.php

    Schönen Gruß

    Afra

    1. In Wirklichkeit ist der COde leider etwas komplizierter und dann klappt sort nicht mehr!

        
      //schleife  
      $azeiten[$startzahl]=$bestzeit1.";".$f1.";".$team;  
        
      //schleife ende  
        
      foreach ($azeiten as $value)  
      {  
      $bestenliste= explode(";",$value);  
      echo "Bestzeit:".$bestenliste[0].  
      "Fahrer:".$bestenliste[1].  
      "Team:".$bestenliste[2];  
      }  
      
      

      Und dann klappt sort nicht mehr!
      Gibt es noch weitere Vorschläge?

      Thomas

      1. Hallo Thomas!

        Und dann klappt sort nicht mehr!

        Ich muß gestehen, daß ich Dein Problem nicht ganz verstehe.
        Wo soll in Deinem Code was genau wie sortiert werden?
        (Zeiten, aufsteigend - also wohl $bestzeit[0]?)

        Im Zweifel implemetier Dir doch kurz ne eigene Sortierfunktion, wenn Du Dein Array schon so aufbaust, daß Du die Standardfunktionen nicht benutzen kannst ... (Da mußt Du vielleicht mal kurz nachdenken, aber sieht mir nicht gerade unmöglich aus)

        MfG
        Götz

        --
        Losung für Freitag, 4. November 2005
        Er sendet sein Gebot auf die Erde, sein Wort läuft schnell. (Psalm 147,15)
        Jesus sprach: Ihr sollt nicht meinen, dass ich gekommen bin, das Gesetz oder die Propheten aufzulösen; ich bin nicht gekommen aufzulösen, sondern zu erfüllen. (Matthäus 5,17)
        (Losungslink)
      2. Lieber Thomas,

        Sortierung geht bei Arrays am ehesten mit usort(). Diese Funktion braucht eine sogenannte Callback-Funktion (die Du definierst), um zu entscheiden, welches der beiden verglichenen Elemente nun in der Reihenfolge vor dem anderen steht. In Deinem Code könnte man usort() sehr leicht verwenden. Ich habe Dein Beispiel etwas modifiziert:

          
         // Sortier-Callback-Funktion  
         function bestzeiten_vergleichen($wert1, $wert2)  
            {  
            // usort will zwei Werte verglichen haben und übergibt diese an die Callback-Funktion  
            $bestzeit1 = substr($wert1, strpos($wert1, ";")); // Bestzeiten "herauslösen"  
            $bestzeit2 = substr($wert2, strpos($wert1, ";"));  
            // Damit usort() weiß, welcher Wert zuerst stehen muss, braucht es einen  
            // Rückgabewert: (-1|0|1). "-1" bedeutet $wert1 ist kleiner als $wert2.  
            // "1" bedeutet $wert1 ist größer als $wert2, und "0" bedeutet "gleichwertig".  
          
            return strnatcomp($bestzeit1, $bestzeit2);  
          
            // strnatcmp() vergleicht zwei Strings auf "natürliche" Weise und gibt einen  
            // passenden Rückgabewert. Da die Bestzeiten als Zeichenketten und nicht als  
            // Dezimalzahlen vorliegen, ist diese Funktion in diesem Zusammenhang sehr  
            // praktisch. ;-) Beispiel ungeprüft!  
            }  
          
         //schleife  
         $azeiten[$startzahl]=$bestzeit1.";".$f1.";".$team;  
          
         //schleife ende  
          
         // Array "$azeiten" sortieren (nach Bestzeiten)  
          
         usort($azeiten, "bestzeiten_vergleichen");  
          
         // Array ausgeben  
         foreach ($azeiten as $value)  
         {  
         $bestenliste= explode(";",$value);  
         echo "Bestzeit:".$bestenliste[0].  
         "Fahrer:".$bestenliste[1].  
         "Team:".$bestenliste[2];  
         }
        

        Vielleicht hilft Dir dieses Beispiel... Hoffentlich.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

  2. Hi,

    Wie bringe ich dies PHP bei??

    als erstes die Zahlen alle gleich formatieren (z.B. mit $zeit[2]=10.40; sprintf("%01.2f",$zeit[2])

    danach sortieren

    gruss

    Maulwurf