0

在我寻求一些基本的 php 知识的过程中,我尝试做一个简单的函数来读取不使用递归迭代器的文件和目录。(更多的练习,但实际上需要任何 php<5.3 服务器)

该功能效果很好 - 但是当我尝试添加switch($output) - 它不再列出所有文件(例如,在添加开关之前,它可以在 4 个文件夹(3+root)中看到 61 个文件,但添加了switch它只能看到 47(仅根)。我在这里做错了吗?为什么该switch语句会破坏虚假的“递归嵌套”?

    function o99_list_my_files_scandir($dir,$output) 
    { 

        $result = $result2 = array(); 

        $root = scandir($dir); 

        foreach($root as $value) 
        { 

          if($value === '.' || $value === '..' || $value == 'Thumb.db' || $value == 'Thumbs.db' || $value == '') { continue;} 

            if(is_file("$dir/$value")) {$result[]="$dir/$value"; continue;} // array files
            if(is_dir("$dir/$value")) {$result2[]="$dir/$value"; continue;} // array dirs

            foreach(o99_list_my_files_scandir("$dir/$value") as $value) 

            { 
                $result[] = $value; 
            }
        } 
            // this is the troublemaker ...

            switch ($output) {
                case 'dirs' :
                return array_filter($result2);  // clean empty results of dirs
                break;

                case 'files' :
                return array_filter($result);   // Clean empty array of files
                break; 
            }

} 

有没有其他简单的方法可以让函数返回单独的目录和文件列表而不是统一数组?

4

2 回答 2

1

因为在这一行...

foreach(o99_list_my_files_scandir("$dir/$value") as $value)

...你不给$output递归调用的函数,所以它不会输出任何东西。将其更改为:

foreach(o99_list_my_files_scandir("$dir/$value", $output) as $value)

实际上,您应该收到有关缺少参数的警告。

于 2012-11-19T22:50:05.380 回答
1

你似乎没有在$output任何地方设置。

顺便说一句:出于学习目的,我强烈建议您添加error_reporting(E_ALL);脚本的第一行并重新运行(首先,不修复任何内容),因为您应该看到警告,因为第二个函数参数不是可选的。你有签名

function o99_list_my_files_scandir($dir,$output) 

但打电话

o99_list_my_files_scandir("$dir/$value")

而你应该

o99_list_my_files_scandir("$dir/$value", $output)

在你的foreach()

于 2012-11-19T22:50:23.833 回答