Sortieralgorithmus
jenni86
- php
1 Klawischnigg0 Edgar Ehritt0 Jenni86
Hallo...habe Probleme mit der Sortierung.
Es geht um die Darstellung von Sportlern, JAHRESWEISE, die neuen Jahren zuerst, die weiteren Jahre darunter. Die Jahre 2006-2008 werden richtig sortiert (2008 - 2007 - 2006), komisch, weil eig ist kein algorithmus drin.
Nun geht es um das aktuelle Jahr 2009. Diesem Jahr wird als Überschrift hinzugefügt, Aktuelle Saison. Demzufolge sollten die Sportler auch ganz oben erscheinen. Jedoch erscheinen sie als letztes.
Wie kann ich einen Sotieralgorithmus mit einbauen? Und wie sieht sowas dann aus?
Der Quellcode sieht so aus:
$pfad2=substr(str_replace('\\', '/',dirname(__FILE__)).'/',strlen($origpfad))."Kadersportler/";
function jahrweise($pfad) {
$verz=opendir ($pfad);
while ($file=readdir($verz)) {
if (filetype($pfad.$file)=="dir" && $file!="." && $file!="..") {
if (file_exists($pfad.$file."/spez.txt") && file_exists($pfad.$file."/bild.jpg")) {
$datei = @ fopen($pfad.$file."/spez.txt", "r");
echo "<div class='kadersportler'";
echo (eregi("MSIE",getenv('HTTP_USER_AGENT')))
? " onmouseover='this.childNodes[2].style.visibility=\"visible\"'
onmouseout='this.childNodes[2].style.visibility=\"hidden\"'>"
: ">";
echo "<img src='/".pfadersetz($pfad.$file)."/bild.jpg'
alt='".textersetz($file)."'>";
echo "<h4 style='font-size:12px;margin-bottom:0px;text-align:center;'>";
echo textersetz($file);
echo "</h4>";
echo "<div class='kaderbeschreibung'>";
echo "<dl>";
echo "<dt>Geburtsdatum</dt><dd>".fgets($datei)."</dd>";
fgets($datei);
echo "<dt>Kader</dt><dd>".fgets($datei)."</dd>";
echo "<dt>Hauptschwimmart</dt><dd>".textersetz(fgets($datei))."</dd>";
echo "<dt>beim HSV seit</dt><dd>".textersetz(fgets($datei))."</dd>";
echo "</dl>";
echo "</div></div>";
fclose($datei);
}
}
}
}
$verz=opendir ($pfad2);
while ($file=readdir($verz)) {
if (filetype($pfad2.$file)=="dir" && $file!="." && $file!=".." && is_numeric($file)) {
$neujahr=intval($file)+1;
echo (date('Y')==$file)
? "<h2>Aktuelle Saison (".$file."/".$neujahr.")</h2>"
: "<h2 style='padding-top:25px'>Saison ".$file."/".$neujahr."</h2>";
jahrweise($pfad2.$file."/");
}
}
Kann mir jemand helfen?
Stehe total auf dem schlauch... blicke nicht mehr durch
Danke!
Hi there,
[...] Die Jahre 2006-2008 werden richtig sortiert (2008 - 2007 - 2006), komisch, weil eig ist kein algorithmus drin.
Augenscheinlich entnimmst Du die Jahreszahlen als Dateien einem Verzeichnis. Dadurch hast Du keinerlei Kontrolle über die Reihenfolge, daß ein paar Jahre "stimmen" hängt einfach mit der Reihenfolge ihres Abspeicherns zusammen (oder auch nicht, ist auch Betriebs- und Filesystem abhängig, wie gesagt, darauf hast Du keinen Einfluss)
Wie kann ich einen Sotieralgorithmus mit einbauen? Und wie sieht sowas dann aus?
Am besten, indem Du die Namen der Datein zuerst in ein Array einliest, dann sortierst und dann in einer zweiten Schleife, in der Du das sortierte Array ausliest, ausgibst...
Hallo,
Am besten, indem Du die Namen der Datein zuerst in ein Array einliest, dann sortierst und dann in einer zweiten Schleife, in der Du das sortierte Array ausliest, ausgibst...
das erscheint mir im allgemeinen Gebrauch zu umständlich. Sowohl globe() als auch scandir() sortieren vor. Mittels Datenfeld zu arbeiten, böte sich dagegen an, wenn z. B. Namen wie 07-10-09 und 07-11-09 zu sortieren wären.
Gruß aus Berlin!
eddi
Hallo,
Habe versucht globe() und scandir() einzubauen...aber irgendwas mach ich falsch...
statt....
while ($file=readdir($verz)) {
if (filetype($pfad2.$file)=="dir" && $file!="." && $file!=".." && is_numeric($file)) {
$neujahr=intval($file)+1;
echo (date('Y')==$file)
? "<h2>Aktuelle Saison (".$file."/".$neujahr.")</h2>"
: "<h2 style='padding-top:25px'>Saison ".$file."/".$neujahr."</h2>";
jahrweise($pfad2.$file."/");
}
}
...setzt Du vorerst...
$dir=scandir($verz);
$c =count($dir);
for($i=2;$i<$c;$i++){
echo $dir[$i]."<br/>\n";
}
ein und guckst Dir die Ausgabe an! Den Rest schaffst Du locker. ;)
Gruß aus Berlin!
eddi
Die Ausgabe ist fehlerhaft...
Warning: scandir() expects parameter 1 to be string, resource given on line: $dir=scandir($verz);
???
Hi!
Die Ausgabe ist fehlerhaft...
Warning: scandir() expects parameter 1 to be string, resource given on line: $dir=scandir($verz);
Es passiert gelegentlich, dass man als Antwortgeber eine Forumsantwort nur hinschreibt und nicht prüft und sich dadurch ein Fehler einschleicht. Soweit kein Problem, passiert mir auch gelegentlich. Andererseits kann sich ein Fehler auch wegen einer nicht vollständig bekannten Umgebung bei Antwortnehmer ergeben. Dieser "darf" sowieso eine Antwort nicht ungeprüft verwenden.
Diesen Fehler kannst du selbst beheben. Dazu musst du zunächst in der Dokumentation nachsehen, was scandir() für einen Wert erwartet und ihm dann einen passenderen als jetzt übergeben.
Lo!
Brauche noch nen Hinweis... kriege es einfach nicht hin... versuche jetzt schon so viele stunden was hinzubekommen... es ist eig logisch, aber an der umsetzung happert es deftig...*gr..*
HILFE?
Hallo Jenni,
Brauche noch nen Hinweis... kriege es einfach nicht hin... versuche jetzt schon so viele stunden was hinzubekommen... es ist eig logisch, aber an der umsetzung happert es deftig...*gr..*
Wie sehen denn deine Versuche bisher aus? Was funktioniert genau nicht? Fehlermeldung?
Gruß,
Tobias
Am besten, indem Du die Namen der Datein zuerst in ein Array einliest, dann sortierst und dann in einer zweiten Schleife, in der Du das sortierte Array ausliest, ausgibst...
Wie kann sowas dann aussehen? Habe jetzt schon in so vielen Foren geschaut, aber schlau werde ich daraus nicht.
Ich lese die Daten (Jahreszahlen der Ordner) direkt am Anfang ein. Wie lese ich das in ein Array ein?
Sortieren mit? ksort();
Hi there,
Ich lese die Daten (Jahreszahlen der Ordner) direkt am Anfang ein. Wie lese ich das in ein Array ein?
naja, anstelle der Programmzeile ~~~php
echo (date('Y')==$file)
? "<h2>Aktuelle Saison (".$file."/".$neujahr.")</h2>"
: "<h2 style='padding-top:25px'>Saison ".$file."/".$neujahr."</h2>";
schreibst Du irgendwas von `$ereignis[$counter]=$file`{:.language-php}
wobei Du $counter vor Beginn der Schleife 0 setzen musst und dann in der Schleife jeweils um eins erhöhst.
> Sortieren mit? ksort();
Mit irgendeinem Sortalgorithmus sortierst Du dann $ereignis und lässt es in einer zweiten Schleife abarbeiten, indem Du das sortierte $ereignis gleich behandelst wie file.
Soweit das Grundsätzliche wobei der von Edgar Ehritt vorgeschlagene Weg in Deinem Fall wahrscheinlich wirklich der bessere wäre, wenn es nur um die einfach Sortierung der Dateien im Verzeichnis geht...