sortierte Dateien
net-zwerg
- php
Hallo alle miteinander.
Ich habe neulich ein ziemlcih einfaches PHP-Skript geschrieben, das ein Verzeichnis auf meinem Webserver (Apache auf SuSE Linux) ausließt,
$basis = "/usr/local/httpd/htdocs/doc/dateien/";
$fd = dir($basis);
while($v = $fd->read() ) {
$arr[]=$v;
}
$fd->close();
und mir die Die Dateien als Verlinkung darstellt.
foreach ($arr as $elem) {
if (($elem!=='..') and ($elem!='.')){
$name=str_replace(".doc","",$elem);
$name=str_replace("_"," ",$name);
echo"<option value='doc/dateien/$elem'>$name";
}
}
Jetzt verstehe ich nur nicht, nach welchem Schema der ganze Kram sortiert ist??? Das wird weder nach Erstellungsdatum (was ich nämlich eigentlich will) noch alphbetisch noch sontirgendwie sortiert.
Ich brauche das unbedingt sortiert. Leider komme ich mit asort(&arr) nicht weiter, da die Dateinamen nicht besonders geshcickt zu ordnen sind. (die heißen 1.Januar_2001.doc, 3.Februar_2002.doc...usw) Die einzige Möglichkeit ist, die nach Erstellungsdatum geordnet auszugeben.
Weiß da jemand weiter
Danke
Net-Zwerg
---------
*linux is like a wigwam - no gates, no windows and an apache inside*
Hoi,
Ich habe neulich ein ziemlcih einfaches PHP-Skript geschrieben,
das ein Verzeichnis auf meinem Webserver (Apache auf SuSE Linux)
ausließt,
[...]
Jetzt verstehe ich nur nicht, nach welchem Schema der ganze Kram
sortiert ist??? Das wird weder nach Erstellungsdatum (was ich
nämlich eigentlich will) noch alphbetisch noch sontirgendwie
sortiert.
Gar nicht. Die Reihenfolge duerfte sich nach der Reihenfolge in
der Datei-Zuordnungs-Tabelle richten.
Ich brauche das unbedingt sortiert. Leider komme ich mit
asort(&arr) nicht weiter, da die Dateinamen nicht besonders
geshcickt zu ordnen sind. (die heißen 1.Januar_2001.doc,
3.Februar_2002.doc...usw) Die einzige Möglichkeit ist, die nach
Erstellungsdatum geordnet auszugeben.
Nun, das geht recht einfach mit usort:
$array = usort($array,"mycmp");
function mycmp($a,$b) {
$date1 = stat($a);
$date2 = stat($b);
if ($a[9] == $b[9]) return 0;
return ($a[9] > $b[9]) ? -1 : 1;
}
Du kannst allerdings nicht nach dem Erstellungs-Datum, sondern
nur nach den Informationen ordnen, die stat() dir gibt.
Siehe dazu auch http://php.net/stat.
Gruesse,
CK
Hoi,
Ich habe neulich ein ziemlcih einfaches PHP-Skript geschrieben,
das ein Verzeichnis auf meinem Webserver (Apache auf SuSE Linux)
ausließt,
[...]
Jetzt verstehe ich nur nicht, nach welchem Schema der ganze Kram
sortiert ist??? Das wird weder nach Erstellungsdatum (was ich
nämlich eigentlich will) noch alphbetisch noch sontirgendwie
sortiert.
Gar nicht. Die Reihenfolge duerfte sich nach der Reihenfolge in
der Datei-Zuordnungs-Tabelle richten.
ahhh so... das ist natürlich auch irgendwie logisch....
Nun, das geht recht einfach mit usort:
$array = usort($array,"mycmp");
function mycmp($a,$b) {
$date1 = stat($a);
$date2 = stat($b);
if ($a[9] == $b[9]) return 0;
return ($a[9] > $b[9]) ? -1 : 1;
}
Du kannst allerdings nicht nach dem Erstellungs-Datum, sondern
nur nach den Informationen ordnen, die stat() dir gibt.
Siehe dazu auch http://php.net/stat.
Ja, vielen Dank, aber irgendwie ist das zu hoch für mich.... ich verstehe das skript irgendwie nicht...
Also usort ist klar....stat mittlerweile auch....aber irgendwie ist mir die funktionsweise nicht so ganz klar...wie bekomme ich denn mein Array damit geordnet....
Gruß
zwerg-in-quest
Hoi, <-- sowas nennt man eine Begruessung
lies mal http://learn.to/quote
ahhh so... das ist natürlich auch irgendwie logisch....
Nun, Tatsache ist, dass die Reihenfolge nicht definiert ist.
Nun, das geht recht einfach mit usort:
$array = usort($array,"mycmp");
function mycmp($a,$b) {
$date1 = stat($a);
$date2 = stat($b);
if ($a[9] == $b[9]) return 0;
return ($a[9] > $b[9]) ? -1 : 1;
}
Du kannst allerdings nicht nach dem Erstellungs-Datum, sondern
nur nach den Informationen ordnen, die stat() dir gibt.
Siehe dazu auch http://php.net/stat.
Ja, vielen Dank, aber irgendwie ist das zu hoch für mich....
ich verstehe das skript irgendwie nicht...
Also usort ist klar....stat mittlerweile auch....aber irgendwie
ist mir die funktionsweise nicht so ganz klar...wie bekomme ich
denn mein Array damit geordnet....
Die Funktion wird im zweiten Parameter an 'usort' uebergeben.
Usort ruft fuer jedes Elemente-Paar diese Funktion auf und uebergibt
ein Elemente-Paar aus dem Array. Die Funktions-Argumente $a und $b
repraesentieren diese beiden Elemente. Jetzt wird geschaut, ob die
letzte Zugriffszeit auf diese Elemente gleich ist, in dem Fall wird
0 zurueck gegeben. Ist die von Element a groesser (== juenger),
dann wird 1 zurueck gegeben. Ansonsten ist die Zugriffszeit von
Element b juenger, und es wird -1 zurueck gegeben. Anhand der
Rueckgabewerte kann usort dann entscheiden, wohin ein Element
gehoert.
Gruesse,
CK
Vielen Dank! Jetzt habe ich es irgendwie auch kapiert. Nur klappt das ganze immer noch nicht.
Mein erster Fehler war, das das Skript den Dateinamen ausgelesen hat, die Funktion allerdings auch den Pfad brauchte.
MIttlerweile habe ich das behoben, aber ich habe ein noch größeres Problem:
mein Array ist nach dem usort kein array mehr
echo "TEMParr:$TEMParr<br>";
$TEMParr = usort($TEMParr,'mycmp');
echo "TEMParr:$TEMParr<br>";
gibt folgendes aus:
TEMParr:Array
TEMParr:1
ich habe mittlerweile die Funktion denkbar einfachst umgestrickt, was aber nichts geholfen hat:
1 function mycmp($a,$b) {
2 global $TEMPbasis;
3
4 $date1 = stat($TEMPbasis.'/'.$a);
5 $date2 = stat($TEMPbasis.'/'.$b);
6
7 echo $date1[9] ."-". $date2[9]."<br>";
8
9 if ($date1[9] == $date2[9]) return 0;
10 if ($date1[9] < $date2[9]) return 1;
11 return -1;
12 }
Zeile 2 gibt mir den Pfad zur Datei.
Die Ausgabe in Zeile 7 liefert den timestamp der Dateien.
Warum ist am ende mein Array kein Array mehr ???
Gruß
Zwerg
Gruesse,
CK
Hoi,
Mein erster Fehler war, das das Skript den Dateinamen ausgelesen
hat, die Funktion allerdings auch den Pfad brauchte.
MIttlerweile habe ich das behoben, aber ich habe ein noch
größeres Problem:
mein Array ist nach dem usort kein array mehr
echo "TEMParr:$TEMParr<br>";
$TEMParr = usort($TEMParr,'mycmp');
echo "TEMParr:$TEMParr<br>";
gibt folgendes aus:
TEMParr:Array
TEMParr:1
Jap, sorry. ich hab einen Fehler gemacht. Aendere das mal in
usort($TEMParr,"mycmp");
statt
$TEMParr = usort($TEMParr,"mycmp)
Gruesse,
CK