我想从PHP函数返回多个值,但它不能像以下代码那样工作:
该函数用于搜索特定文件夹及其递归文件夹中的文件名,并将文件名存储在数组中。
在此示例中,将调用特定(主)文件夹:F:\ test
调用递归文件夹:F:\ test \ subfolder
主文件夹和子文件夹包含7个文件,文件名格式为:
对于主文件夹:1.txt,2.txt,3.txt,4.txt
对于子文件夹:5.txt,6.txt,7.txt
function getDirectory( $path = '.', $level = 0 ) {
$i=0;$j=0;
$dh = @opendir( $path );
while( false !== ( $file = readdir( $dh ) ) ){
// Loop through the directory
if( is_dir( "$path/$file" ) ){
// Its a directory, so we need to keep reading down...
getDirectory( "$path/$file", ($level+1) );
// Re-call this same function but on a new directory, this is what makes function recursive.
} else {
if ($level>0) //in a recursive folder
{
$dir_matched[$j]=$file;
$j++;
}
else //in main folder
{
$files_matched[$i] = $file;
$i++;
}
}
}
closedir( $dh );
//print_r ($files_matched);
//print_r ($dir_matched); I tested this before return, both works fine.
return array($files_matched,$dir_matched);
}
echo "<pre>";
list($a,$b) = getDirectory("F:\test");
print_r ($a); // this will result the same as array $files_matched, it ok!
print_r ($b); // but i don't know why I cannot get the array of $dir_matched??
echo "</pre>";
正如你所看到的,奇怪的是我只能得到一个阵列?有什么想法我可以获得$dir_matched
数组的内容吗?
答案 0 :(得分:0)
现在编写它的方式,你没有从递归调用中捕获值。在你的函数中,在这一行:
getDirectory( "$path/$file", ($level+1) );
您需要从中捕获返回的值。类似的东西:
$files_matched[++$i] = getDirectory( "$path/$file", ($level+1));
$i
可能不是你想要的,你需要像在else statement
中那样在这里增加它,或者在另一个变量中捕获它们以反映一个子目录 - 取决于你想要完成什么。