rekursive Dateiabfrage und array_push

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • rekursive Dateiabfrage und array_push

    Hallo zusammen -

    Ich versuche gerade Dateien aus Ordnern und Unterordnern abzufragen und in ein Array zu schreiben.
    Die Abfrage der Dateien funktioniert auch, aber es hapert am Array.

    Code:
    function getDir($dir) {
      $files = array();
      array_push($files,'test');
      $dh = opendir($dir);
      while( ( $file = readdir( $dh ) ) !== false ) {
        if($file != "." && $file != "..") {
          if(is_dir("$dir/$file")) {
            //do nothing
            getDir("$dir/$file");
          } else {
              echo $file;
            array_push($files,$file);
          }
        }
      }
      closedir($dh);
      return $files;
    }
    Der erste Eintrag ins Array mit test funktioniert. echo $file gibt auch alle Dateinamen aus. Diese werden aber dann nicht mit array_push($files,$file) dem Array angehängt.
    Ich komme nur nicht drauf warum.

    Grüße, Tobias

  • #2
    Du verarbeitest den Return-Wert bei
    getDir("$dir/$file");
    nicht

    Kommentar


    • #3
      Ich steh immer noch auf dem Schlauch.

      Hier nochmal das ganze Trauerspiel:

      Code:
      function getDir($dir) {
        $files = array();
        $filename="";
        $dh = opendir($dir);
        while( ( $file = readdir( $dh ) ) !== false ) {
          if($file != "." && $file != "..") {
            if(is_dir("$dir/$file")) {
              getDir("$dir/$file");
              array_push($files,$file);
            } else {
              echo 'echo: '.$file.'<br>';
              array_push($files,$file);
            }
          }
        }
        closedir($dh);
        return $files;
      }
      echo '<pre>';
          print_r (getDir("content/photos"));
      echo '</pre>';
      Das Ergebnis ist:
      Code:
      echo: DSC03241-Edit.jpg
      echo: DSC03234-Edit.jpg
      echo: IMG_2211.jpg
      Array (     [0] => test1     [1] => test2 )
      test1 und test2 sind die Ordner. Diese werden auch in das Array eingetragen. Dass er in die else Abfrage springt und $file belegt wird sieht man daran, dass das echo funktioniert.
      Nur wird $file bei der else Abfrage dann nicht in das Array geschrieben.

      Grüße

      Tobias
      Zuletzt geändert von dennerbiz; 04.08.2017, 08:38.

      Kommentar


      • #4
        PHP-Code:
        if(is_dir("$dir/$file")) {
            
        getDir("$dir/$file");
            
        array_push($files,$file);

        Du verarbeitest, wie bereits angemerkt, den Rückgabewert des rekursiven Aufrufs nicht. Da müsste so was stehen wie:

        PHP-Code:
        if(is_dir("$dir/$file")) {
            
        $filesRec getDir("$dir/$file");
            
        x_array_push($files$filesRec);

        Die Funktion mit x_* ist Quatsch. Ich weiß nur gerade aus dem Kopf nicht, wie die Funktion genau arbeitet, die ein Array an ein Array anhängt.

        Ich denke, es ist array_merge, aber bitte Doku lesen.

        Kommentar

        Lädt...
        X