Home  >  Q&A  >  body text

PHP:递归遍历结果保存到多维数组

请问,如何使用php实现递归遍历给定路径(比如:$path = c:)下的所有子目录,运行后能将目录名称保存为如下格式

array
  'a' => 
    array
      0 => string 'a1' (length=2)
      1 => string 'a2' (length=2)
      2 => string 'a3' (length=2)
  'b' => 
    array
      'b1' => 
        array
          0 => string 'b11' (length=3)
          1 => string 'b12' (length=3)
      0 => string 'b2' (length=2)
  'c' => 
    array
      0 => string 'c1' (length=2)
      1 => string 'c2' (length=2)
      'c3' => 
        array
          0 => string 'c31' (length=3)
          1 => string 'c32' (length=3)

我目前实现的,只能将结果保存到一维数组中,代码如下:

function get_subdir_path($path,&$dir_array,$sub_dir = TRUE)
{
    global $files_array;
    if (is_dir($path))
    {
        if($handle = opendir($path))
        {
            while (($file = readdir($handle))!=false)
            {
                if ($file !="." && $file != "..")
                {
                    $temp_path = $path ."/".$file;
                    if (is_dir($temp_path)){
                        array_push($dir_array,$temp_path);
                        if ($sub_dir==TRUE) {
                            get_subdir_path($temp_path,$dir_array);
                        }
                    }
                }
            }
        }
    }
}

类似如下图所示:

天蓬老师天蓬老师2773 days ago464

reply all(1)I'll reply

  • 阿神

    阿神2017-04-10 14:46:32

    今天刚刚说完一个人又来了一个范例。
    少年,请问你看到最后面的一串花括号你头疼么?整整有8级以上的缩进啊,这还能让人看么!果断要差评好不好!

    function scan_rescursive($directory) {
        $res = array();
        foreach(glob("$directory/*") as $item) {
            if(is_dir($item)) {
                $folder = end(explode('/', $item));
                $res[$folder] = scan_rescursive($item);
                continue;
            }
            $res[] = basename($item);
        }
        return $res;
    }
    

    reply
    0
  • Cancelreply