2015-07-21 83 views
2

我試圖遞歸地掃描文件夾結構並填充數組與路徑到每個找到的文件。 但是print_r($fileArray)給我一個空數組作爲輸出?像這樣:Array ()foreach不填充數組

錯誤在哪裏?

function getFilePaths($path){ 
    $structureArray = []; 
    $fileArray = []; 

    foreach(new DirectoryIterator($path) as $item){ 

     if($item->isDir()){ 
      if(!$item->isDot()) { 
       $structureArray[$item->getFilename()] = getFilePaths($item->getPathname()); 
      } 
      continue; 
     } 

     $fileArray[] = '"'. $item->getPathname() .'"'; 
    } 

    return $fileArray; 
} 

更新

的var_dump($項目)的輸出;您的foreach內:

object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(68) "music\sorted\3 Doors Down\Seventeen Days\01 Right Where I Belong.mp3" ["fileName":"SplFileInfo":private]=> string(27) "01 Right Where I Belong.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(59) "music\sorted\3 Doors Down\Seventeen Days\02 It's Not Me.mp3" ["fileName":"SplFileInfo":private]=> string(18) "02 It's Not Me.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(58) "music\sorted\3 Doors Down\Seventeen Days\AlbumArtSmall.jpg" ["fileName":"SplFileInfo":private]=> string(17) "AlbumArtSmall.jpg" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(51) "music\sorted\3 Doors Down\Seventeen Days\Folder.jpg" ["fileName":"SplFileInfo":private]=> string(10) "Folder.jpg" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(59) "music\sorted\3 Doors Down\The Better Life\01 Kryptonite.mp3" ["fileName":"SplFileInfo":private]=> string(17) "01 Kryptonite.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(54) "music\sorted\3 Doors Down\The Better Life\02 Loser.mp3" ["fileName":"SplFileInfo":private]=> string(12) "02 Loser.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(59) "music\sorted\3 Doors Down\The Better Life\AlbumArtSmall.jpg" ["fileName":"SplFileInfo":private]=> string(17) "AlbumArtSmall.jpg" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#9 (4) { ["pathName":"SplFileInfo":private]=> string(52) "music\sorted\3 Doors Down\The Better Life\Folder.jpg" ["fileName":"SplFileInfo":private]=> string(10) "Folder.jpg" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#5 (4) { ["pathName":"SplFileInfo":private]=> string(55) "music\unsorted\01 Club Rocker (Mike Candys Radio Ed.mp3" ["fileName":"SplFileInfo":private]=> string(40) "01 Club Rocker (Mike Candys Radio Ed.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#7 (4) { ["pathName":"SplFileInfo":private]=> string(69) "music\unsorted\tagged\257ers - Bis dahin bin ich tot ft. Favorite.mp3" ["fileName":"SplFileInfo":private]=> string(47) "257ers - Bis dahin bin ich tot ft. Favorite.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } object(DirectoryIterator)#7 (4) { ["pathName":"SplFileInfo":private]=> string(62) "music\unsorted\tagged\257ers - Seite an Seite ft. Favorite.mp3" ["fileName":"SplFileInfo":private]=> string(40) "257ers - Seite an Seite ft. Favorite.mp3" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } 
+1

在你的foreach中進行一些調試。 – Jessica

+0

var_dump($ item);'foreach'內部的輸出是什麼? – vitozev

+1

如果您總是點擊'continue'語句,'$ fileArray'將爲空。正如@Jessica指出的那樣,一些調試會有所幫助。另外,如果你既不使用它,也不將它返回給調用者,那麼'$ structureArray'有什麼意義? – YvesLeBorg

回答

5

我用這個代碼來生成目錄中的PHP文件列表,並從每個文件名

刪除擴展名爲「.PHP」,而無需使用DirectoryIterator

function getFiles($directory){ 
     $files = array_diff(scandir($directory), array('.','..','.htaccess')); 
     foreach($files as $f){ 
      if(strstr($f, ".php")) 
       $fileArray[] = str_replace(".php","",$f); 
      else { 
       $fileArray[$f] = getFiles($directory."/".$f); 
      } 
     } 
     return $fileArray; 
    } 

PS所有文件名將在一個數組中,甚至子目錄中的文件

+0

這就是我想要的。謝謝! –

+0

不客氣:) –

0

我不知道你是否已經試過這個,但glob($file_path."*");應該返回給定文件夾中的所有文件。它內置於php並且相當短。

+0

是的,但不幸的是不遞歸。 –