Verzeichnis sortieren
dey
- php
1 Sasha1 Dieter Raber0 Sasha
1 Sasha0 dey
0 Dieter Raber
Hallo
ich habe ein Problem, welches ich schon im Archiv gefunden habe:
http://forum.de.selfhtml.org/archiv/2003/8/t54704/#m304498
Mein code lautet:
<?PHP
$verz=opendir ('photo');
closedir($verz);
ksort($verz);
reset($verz);
while ($verz2 = readdir ($verz)) {
if (($verz2 != ".") && ($verz2 != "..")){
echo "<a href='?link=1&sty=$sty&substy=1&blink=$verz2'>$verz2</a> <br>";
?>
Auch möchte das Verzeichnis bzw. den Inhalt der Variable $verz sortieren lassen, bevor ich es dann ausgeben.
Die Idee mit dem ksort habe ich aus dem Link oben.
Ich bekomme aber den Fehler, dass es sich nicht um ein Array handelt:
Warning: ksort() expects parameter 1 to be array, resource given in
Was läuft da denn schief.
bydey
Du mußt das sort() auf ein array anwenden
Mein code lautet:
<?PHP
$verz=opendir ('photo');
closedir($verz);
ksort($verz);
reset($verz);
while ($verz2 = readdir ($verz)) {
if (($verz2 != ".") && ($verz2 != "..")){
echo "<a href='?link=1&sty=$sty&substy=1&blink=$verz2'>$verz2</a> <br>";
?>
Die lange, kürzbare, aber dafür gut verständliche Variante:
sort() kannst Du auch noch Flags zuweisen um nach bestimmten Mustern zu sortieren
$verz=opendir ('photo');
closedir($verz);
reset($verz);
$verzeichnisse = array();
while ($verz2 = readdir ($verz)) {
if (($verz2 != ".") && ($verz2 != "..")){
array_push($verzeichnisse, $verz2);
}
}
$verzecihnisse = sort ($verzeichnisse);
foreach ($verzeichnisse as $v) {
echo "<a href='$PHP_SELF?verzecihniss=$v'>$v</a>";
}
Grüße
Sasha
Hallo Sasha,
$verz=opendir ('photo');
closedir($verz);
reset($verz);
$verzeichnisse = array();
while ($verz2 = readdir ($verz)) {
Du hast das Verzeichnis bereits geschlossen, da gibt's nichts mehr zu lesen
Gruß,
Dieter
Klar, siehe Nachtrag...
Sorry
Nachtrag:
Hatte den Code von Dir kopiert
Verzeichnis natürlich erst nach dem durchlaufen schliessen.
Sasha
Hallo Sasha,
Du mußt das sort() auf ein array anwenden
Die lange, kürzbare, aber dafür gut verständliche Variante:
sort() kannst Du auch noch Flags zuweisen um nach bestimmten Mustern zu sortieren$verz=opendir ('photo');
closedir($verz);
reset($verz);
$verzeichnisse = array();
while ($verz2 = readdir ($verz)) {
if (($verz2 != ".") && ($verz2 != "..")){
array_push($verzeichnisse, $verz2);
}
}
$verzecihnisse = sort ($verzeichnisse);
foreach ($verzeichnisse as $v) {
echo "<a href='$PHP_SELF?verzecihniss=$v'>$v</a>";
}
Danke so funktioniert es:
$verz=opendir ('photo');
//reset($verz);
$verzeichnisse = array();
while ($verz2 = readdir ($verz)) {
if (($verz2 != ".") && ($verz2 != "..")){
array_push($verzeichnisse, $verz2);
}
}
$verzecihnisse = sort ($verzeichnisse);
foreach ($verzeichnisse as $v) {
echo "<a href='?link=1&sty=$sty&substy=1&blink=$v'>$v</a> <br>";
}
closedir($verz);
reset bringt Fehler, nur für array
closedir muss wohl doch ans Ende
Noch 3 schnelle Fragen:
1. was bringt das reset
2. Was hat es mit den Flags auf sich
3. wie lautet sort-Befehl für invertiertes sortieren?
bydey
Hallo,
Danke erstmal. Mein Hauptproblem ist gelöst.
Vielleicht findet trotzdem noch jemand Zeit sich um Sub-probeleme 1 + 2 kümmern.
Noch 3 schnelle Fragen:
- was bringt das reset
- Was hat es mit den Flags auf sich
- wie lautet sort-Befehl für invertiertes sortieren?
habe rsort selbst gefunden!
bydey
- was bringt das reset
In diesem Fall garnichts, es ist eine Funktion die Zeiger von array auf den ersten Wert zurücksetzt.
Ich hatte das blöderweise auch mitkopiert, aber, wie gesagt, in dem Fall nützt es nichts.
- Was hat es mit den Flags auf sich
SORT_REGULAR - Vergleiche Einträge normal
SORT_NUMERIC - Vergleiche Einträge numerisch
SORT_STRING - Vergleiche Einträge als Strings
Siehe: http://de2.php.net/sort
- wie lautet sort-Befehl für invertiertes sortieren?
rsort($array)
Hallo Sasha,
Nochmal Danke
bydey
Hallo dey,
$verz=opendir ('photo');
Du öffnest das Verzeichnis, $verz ist somit eine Resource
closedir($verz);
Du schliesst das Verzeichnis
ksort($verz);
Du wendest ksort() auf die Resource $verz an, ksort() erwartet aber ein Array.
reset($verz);
Das hat keine Auswirkung, da ksort() gescheitert ist.
while ($verz2 = readdir ($verz)) {
Du willst ein Verzeichnis auslesen, dass du bereits geschlossen hast
if (($verz2 != ".") && ($verz2 != "..")){
echo "<a href='?link=1&sty=$sty&substy=1&blink=$verz2'>$verz2</a> <br>";
Kann es sein, dass dein error_reporting() nicht auf E_ALL, bzw 2047 steht?
Gruß,
Dieter