求助:关于遍历文件夹 我有一个文件夹testFolder,testFolder里面有a,b,c三个文件夹,a文件夹里面有a1和a2文件夹,a1文件夹里面有a11文件夹,我写的把所有文件夹都遍历出來了,我只想遍历到a文件夹里面的所有文件夹列出来,高手们请教了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 testFolder| +a +a1 +a2 +b +c我想要这样的结果,a1里面的文件夹就不用列出来了。 function get_folder_file($folder_path){ $file_list = array(); $handle = opendir($folder_path); while(false !== ($filename = readdir($handle))) { if($filename != '.' && $filename != '..') { if(is_dir($folder_path.'/'.$filename)) { $file_list = array_merge($file_list,get_folder_file($folder_path.'/'.$filename)); } else { $file_list[] = $folder_path.'/'.$filename; } } } closedir($handle); return $file_list;}返回一个数组,里面包含了所有文件的绝对路径~自己测过的~如果你只要文件名的话 就自己改改吧 $path = "E:/www/unotice"; echo "<pre>"; print_r(listdirs($path)); function listdirs($dir) { static $allfiles = array(); $dirs = glob($dir . '/*'); if (count($dirs) > 0) { foreach ($dirs as $d){ if(is_dir($d)){ listdirs($d); }else{ $allfiles[] = $d; } } } return $allfiles; } fscan配合is_dir()函数,如果懂的人,帮忙下,没用过这个,正在尝试,谢谢 function foo($folder_path){ $dir_list = array(); $handle = opendir($folder_path); while(false !== ($filename = readdir($handle))) { if($filename != '.' && $filename != '..') { if(is_dir($folder_path.'/'.$filename)) { $dir_list[] = $folder_path.'/'.$filename; } } } closedir($handle); return $dir_list;}只读文件夹嘛...大概是这样吧 function get_filetree_scandir($path){ $result = array(); $temp = array(); if (!is_dir($path)||!is_readable($path)) return null; //检测目录 $allFiles = scandir($path); //获取目录下所有文件与文件夹 foreach ($allFiles as $fileName) { //遍历一遍目录下的文件与文件夹 if (in_array($fileName,array('.','..'))) continue; //无视 . 与 .. $fullName = $path.'/'.$fileName; //得到完整文件路径 //echo $fullName."<br>"; if (is_dir($fullName)) { //如果是目录的话继续递归 echo " ".$fileName."<br>"; $result[$fileName] = get_filetree_scandir($fullName); //递归开始 }else { //echo "$fileName"; $temp[] = $fileName; //如果是文件,就存入数组 } } foreach ($temp as $tmp) { //把临时数组的内容存入保存结果的数组 $result[] = $tmp; //这样可以让文件夹排前面,文件在后面 } return $result;}print_r(json_encode(get_filetree_scandir($path)));这样写的话就会列出所有的文件了,我只要列出到a1,a2这一级的文件夹就可以了,至于a1里面的文件夹就不用列出來了。 哦..我好像理解错楼主的意思了..楼主能预先知道那个文件夹的名字吗..能的话就这样子做吧function foo($folder_path,$flag){ $dir_list = array(); $handle = opendir($folder_path); while(false !== ($filename = readdir($handle))) { if($filename != '.' && $filename != '..') { if(is_dir($folder_path.'/'.$filename)) { if($filename == $flag) { $dir_list = array_merge($dir_list,foo($folder_path.'/'.$filename)); } $dir_list[] = $folder_path.'/'.$filename; } } } closedir($handle); return $dir_list;}var_dump(foo('/****/test','aa'));输出array(3) { [0]=> string(33) "/****/test/bb" [1]=> string(37) "/****/test/aa/aaa" [2]=> string(33) "/****/test/aa"} dir:D:/wamp/www/traversalFolder/testUIFolder ,testUIFolder->a文件夹testUIFolder->a文件夹->a1文件夹testUIFolder->a文件夹->a1文件夹->a11文件夹 //遍历的时候这一级的文件夹不要显示testUIFolder->a文件夹->a2文件夹testUIFolder->a文件夹->a3文件夹testUIFolder->b文件夹testUIFolder->c文件夹 获取sina邮箱联系人列表失败,求救!!! 求教大家一个正则的写法.谢谢了,我写在httpd.ini文件里面的. 存储过程在PHP怎么样取得结果集? 怎么让一个网站过一个小时自动关闭?而不用按关闭按钮? 简单问题,php开新窗口传值,以及确认button行为!大家帮帮忙! 项目需要,谁win98第一版呀,急呀,大家谁有??? 分页显示 PHP4.3.3发布 怎么用php实现在线发布留言及管理人家的留言啊?~~ php怎么读取MYSQL数据到radio选项 请教:PHP的项目在windows下开发的,上传至linux服务器后导致一些功能不好使 MYSQL有存储过程吗
+a
+a1
+a2
+b
+c我想要这样的结果,a1里面的文件夹就不用列出来了。
{
$file_list = array();
$handle = opendir($folder_path);
while(false !== ($filename = readdir($handle)))
{
if($filename != '.' && $filename != '..')
{
if(is_dir($folder_path.'/'.$filename))
{
$file_list = array_merge($file_list,get_folder_file($folder_path.'/'.$filename));
}
else
{
$file_list[] = $folder_path.'/'.$filename;
}
}
}
closedir($handle); return $file_list;
}返回一个数组,里面包含了所有文件的绝对路径~自己测过的~如果你只要文件名的话 就自己改改吧
$path = "E:/www/unotice";
echo "<pre>";
print_r(listdirs($path));
function listdirs($dir) {
static $allfiles = array();
$dirs = glob($dir . '/*');
if (count($dirs) > 0) {
foreach ($dirs as $d){
if(is_dir($d)){
listdirs($d);
}else{
$allfiles[] = $d;
}
}
}
return $allfiles;
}
function foo($folder_path)
{
$dir_list = array();
$handle = opendir($folder_path);
while(false !== ($filename = readdir($handle)))
{
if($filename != '.' && $filename != '..')
{
if(is_dir($folder_path.'/'.$filename))
{
$dir_list[] = $folder_path.'/'.$filename;
}
}
}
closedir($handle); return $dir_list;
}
只读文件夹嘛...大概是这样吧
$result = array();
$temp = array();
if (!is_dir($path)||!is_readable($path)) return null; //检测目录
$allFiles = scandir($path); //获取目录下所有文件与文件夹
foreach ($allFiles as $fileName) { //遍历一遍目录下的文件与文件夹
if (in_array($fileName,array('.','..'))) continue; //无视 . 与 ..
$fullName = $path.'/'.$fileName; //得到完整文件路径
//echo $fullName."<br>";
if (is_dir($fullName)) { //如果是目录的话继续递归
echo " ".$fileName."<br>";
$result[$fileName] = get_filetree_scandir($fullName); //递归开始
}else {
//echo "$fileName";
$temp[] = $fileName; //如果是文件,就存入数组
}
}
foreach ($temp as $tmp) { //把临时数组的内容存入保存结果的数组
$result[] = $tmp; //这样可以让文件夹排前面,文件在后面
}
return $result;
}
print_r(json_encode(get_filetree_scandir($path)));
这样写的话就会列出所有的文件了,我只要列出到a1,a2这一级的文件夹就可以了,至于a1里面的文件夹就不用列出來了。
哦..我好像理解错楼主的意思了..楼主能预先知道那个文件夹的名字吗..能的话就这样子做吧function foo($folder_path,$flag)
{
$dir_list = array();
$handle = opendir($folder_path);
while(false !== ($filename = readdir($handle)))
{
if($filename != '.' && $filename != '..')
{
if(is_dir($folder_path.'/'.$filename))
{
if($filename == $flag)
{
$dir_list = array_merge($dir_list,foo($folder_path.'/'.$filename));
}
$dir_list[] = $folder_path.'/'.$filename;
}
}
}
closedir($handle); return $dir_list;
}var_dump(foo('/****/test','aa'));输出array(3) {
[0]=>
string(33) "/****/test/bb"
[1]=>
string(37) "/****/test/aa/aaa"
[2]=>
string(33) "/****/test/aa"
}
D:/wamp/www/traversalFolder/testUIFolder ,
testUIFolder->a文件夹
testUIFolder->a文件夹->a1文件夹
testUIFolder->a文件夹->a1文件夹->a11文件夹 //遍历的时候这一级的文件夹不要显示
testUIFolder->a文件夹->a2文件夹
testUIFolder->a文件夹->a3文件夹
testUIFolder->b文件夹
testUIFolder->c文件夹