Sortierreihenfolge!!!
Thomas
- php
0 afra0 Thomas0 Götz0 Felix Riesterer
0 Maulwurf
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
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
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
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
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.
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