我有一个文件夹testFolder,testFolder里面有a,b,c三个文件夹,a文件夹里面有a1和a2文件夹,a1文件夹里面有a11文件夹,
我写的把所有文件夹都遍历出來了,我只想遍历到a文件夹里面的所有文件夹列出来,高手们请教了。

解决方案 »

  1.   

    testFolder|
              +a
                +a1
                +a2
              +b
              +c我想要这样的结果,a1里面的文件夹就不用列出来了。
      

  2.   

    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;
    }返回一个数组,里面包含了所有文件的绝对路径~自己测过的~如果你只要文件名的话 就自己改改吧
      

  3.   


    $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;
    }
      

  4.   

    fscan配合is_dir()函数,如果懂的人,帮忙下,没用过这个,正在尝试,谢谢
      

  5.   


    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;
    }
    只读文件夹嘛...大概是这样吧
      

  6.   

    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 "&nbsp;".$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里面的文件夹就不用列出來了。
      

  7.   


    哦..我好像理解错楼主的意思了..楼主能预先知道那个文件夹的名字吗..能的话就这样子做吧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"
    }
      

  8.   

    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文件夹