php - foreach 不填充数组

标签 php arrays foreach directory-structure

我正在尝试递归扫描文件夹结构,并用每个找到的文件的路径填充数组。 但是 print_r($fileArray) 给我一个空数组作为输出?像这样:Array()

哪里错了?

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($item) 的输出;在你的 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) "" }

最佳答案

我使用此代码在目录中生成 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;
    }

附注所有文件名都将位于一个数组中,即使是子目录中的文件

关于php - foreach 不填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541203/

相关文章:

PHP - 如果语句在 foreach 循环中无法正常工作

php - 在服务器上为多个用户运行 MySql

php - WordPress PHPmailer 不工作

PHP 比较两个日期数组并检查是否匹配

ios - 如何在 Swift 中按数组元素分组

c# - 为什么 .NET 中的通用 Dictionary 不提供 ForEach() 方法?

javascript - forEach 通过一个处理 DOM 元素数组

php - 使用 php 使用 sudo 执行命令

php - Symfony 2 - 属性中的注释不存在,或者无法自动加载。

php - 将 json 数据输入智能建议插件