Php 递归使用函数列出dir和subdir中的所有文件
我写下了这个简单的函数,将dir和subdir中的所有文件都放在一个数组中,但它不起作用。当我回显Php 递归使用函数列出dir和subdir中的所有文件,php,function,Php,Function,我写下了这个简单的函数,将dir和subdir中的所有文件都放在一个数组中,但它不起作用。当我回显$f时,没有显示任何内容。 我哪里做错了 define('ROOT_DIR', __DIR__); function scanSubDir($w_dir){ $dir = scandir($w_dir); foreach($dir as $f){ if($f != '..' || $f != '.'){ if(is_file($w_dir.
$f
时,没有显示任何内容。
我哪里做错了
define('ROOT_DIR', __DIR__);
function scanSubDir($w_dir){
$dir = scandir($w_dir);
foreach($dir as $f){
if($f != '..' || $f != '.'){
if(is_file($w_dir.$f)){
$list[] = $f;
}elseif(is_dir($w_dir.$f)){
scanSubDir($w_dir.$f);
}
}
}
return $list;
}
$file = scanSubDir(ROOT_DIR.'/test/');
foreach($file as $f){
echo $f;
}
修复您的代码:
function scanSubDir($w_dir){
$dir = scandir($w_dir);
$list = array(); // <-- create initially empty list of files
foreach($dir as $f){
if($f != '..' || $f != '.'){
if(is_file($dir.$f)){
$list[] = $f;
}elsif(is_dir($dir.$f)){
$sublist = scanSubDir($dir.PATH_SEPARATOR.$f); // <-- include path separator!
$list = array_merge($list, $sublist); // <-- merge the result of the recursive call
}
}
}
return $list;
}
结果将是:数组('file.txt','file.jpg','file.txt')
(数组元素的顺序可能不同)。
请注意,'file.txt'
出现两次,没有路径信息
<?php
function _scandir($dir = '.', $files = array())
{
foreach(glob($dir . '/*') as $file) {
if(is_file($file)) {
$files[] = $file;
}else{
$files = array_merge($files, _scandir($file));
}
}
return $files;
}
?>
<pre>
<?php print_r(_scandir()); ?>
</pre>
您不能附加$dir
和$f
,因为$dir
是一个scandir结果数组。首先,您在函数中硬连接目录($dir=scandir(ROOT_dir./test/);
)-因此它只会扫描该目录。另一方面,当您进行递归调用时,实际上并没有向$list添加任何内容。这可能与糟糕的解决方案重复,这可以通过使用PHP的目录迭代器执行3行代码来实现。
<?php
function _scandir($dir = '.', $files = array())
{
foreach(glob($dir . '/*') as $file) {
if(is_file($file)) {
$files[] = $file;
}else{
$files = array_merge($files, _scandir($file));
}
}
return $files;
}
?>
<pre>
<?php print_r(_scandir()); ?>
</pre>