该功能效果很好 - 但是当我尝试添加switch
($输出)时 - 它不再列出所有文件(例如,在添加开关之前,它可以看到4个文件夹中的61个文件( 3 + root)但添加了switch
它只能看到47(只有root)。
我在这里做错了吗?为什么switch
语句打破了虚假的“recursive-nest”??
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;
}
}
有没有其他简单的方法让函数返回dirs AND文件的单独列表而不是统一数组?
答案 0 :(得分:1)
因为在这一行......
foreach(o99_list_my_files_scandir("$dir/$value") as $value)
...你没有给递归调用的函数$output
,所以它不会输出任何东西。将其更改为:
foreach(o99_list_my_files_scandir("$dir/$value", $output) as $value)
实际上你应该对失踪的争论发出警告。
答案 1 :(得分:1)
您似乎无法在任何地方设置$output
。
BTW:出于学习目的,我强烈建议将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()