dey: Verzeichnis sortieren

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

--
-- noch immer ein erfolgloser <DIV> Jünger --
  1. 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

    1. 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

      1. Klar, siehe Nachtrag...
        Sorry

    2. Nachtrag:
      Hatte den Code von Dir kopiert
      Verzeichnis natürlich erst nach dem durchlaufen schliessen.

      Sasha

    3. 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

      --
      -- noch immer ein erfolgloser <DIV> Jünger --
      1. 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:

        1. was bringt das reset
        2. Was hat es mit den Flags auf sich
        3. wie lautet sort-Befehl für invertiertes sortieren?

        habe rsort selbst gefunden!

        bydey

        --
        -- noch immer ein erfolgloser <DIV> Jünger --
        1. 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.

        1. 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

        1. wie lautet sort-Befehl für invertiertes sortieren?

        rsort($array)

        1. Hallo Sasha,

          Nochmal Danke

          bydey

          --
          -- noch immer ein erfolgloser <DIV> Jünger --
  2. 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