为什么我不能在数组中返回多个值?

时间:2012-10-27 20:30:05

标签: php arrays

我想从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数组的内容吗?

1 个答案:

答案 0 :(得分:0)

现在编写它的方式,你没有从递归调用中捕获值。在你的函数中,在这一行:

getDirectory( "$path/$file", ($level+1) );

您需要从中捕获返回的值。类似的东西:

$files_matched[++$i] = getDirectory( "$path/$file", ($level+1));

$i可能不是你想要的,你需要像在else statement中那样在这里增加它,或者在另一个变量中捕获它们以反映一个子目录 - 取决于你想要完成什么。