数组

时间:2016-09-22 11:27:11

标签: php

所以有用户目录空间。每个用户都有自己的空间,他们可以上传.gif,jpg,png和mp4文件。

用户可以根据需要在尽可能多的目录或子目录中创建和管理自己的文件。

我不知道如何为我的最终结果做我需要的事情所以我没有示例代码。我需要的最终结果如下:

foreach ($file AS $file) {
    $data[] = array('type' => 'image', 
    'path' => $file["path"],
    'name' => $file[name], 
    'time' => $file["update_time"]);
}

如何从目录中获取详细信息,请记住我不知道基本目录后的结构是什么样的。

另外,我需要排除所有以a开头的目录和文件。 (例如.htaccess,但还有其他人)

1 个答案:

答案 0 :(得分:2)

你走了。美国递归函数迭代每个目录。如果是目录,则执行递归,否则获取并存储数据:

$directoryToScan = './';
$results = [];
$tree = getDirEnties($directoryToScan, $results);
var_dump($tree);

function getDirEnties($directory, &$results) {
    $entries = scandir($directory);
    foreach ($entries as $item) {
        if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
            $path = $directory . '/' . $item;
            if (is_dir($path)) {
                getDirEnties($path, $results);
            } else {
                $pathInfo = pathinfo($path);
                $name = $pathInfo['filename'];
                $type = 'unknown';
                if (!empty($pathInfo['extension'])) {
                    $name .= "." . $pathInfo['extension'];
                    switch (strtolower($pathInfo['extension'])) {
                        case "gif":
                        case "jpg":
                        case "png":
                        case "jpeg":
                        case "bmp":
                            //etc..
                            $type = 'image';
                            break;
                        case "mp4":
                            $type = 'media';
                            break;
                    }
                }
                $data = [
                    'name' => $name,
                    'path' => $pathInfo['dirname'],
                    'type' => $type,
                    'time' => filemtime($path)
                ];
                $results[] = $data;
            }
        }
    }
    return $results;
}