PHP按类型组合目录中的计数文件

时间:2016-09-25 21:55:32

标签: php

以下以递归方式返回基于给定目录的图像和视频。为每个用户返回大量目录和文件。我想要做的是找出一种方法来计算从每个目录返回的图像和视频,并合并为用户返回的所有目录的结果。

$results = [];
function getDirEnties($directory, &$results, $friend, $static_path) {
    $i = 0;      
    $entries = scandir($directory);
    foreach ($entries as $item) {
        if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
            $path = $directory . '/' . $item;
            $rel_path = $static_path . '/' . $item;
            if (is_dir($path)) {
                getDirEnties($path, $results, $friend, $rel_path);
            } else {
                $i++;
                $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 = 'video';
                        break;
                    }
                }
                $tttt = filemtime($path);
                $data = [
                    'name' => $name,
                    'username' => $friend,
                    'path' => $rel_path,
                    'type' => $type,
                    'id' => $i,
                    'time' => date('F d Y h:i A', $tttt)
                ];
                $results[] = $data;
            }
        } 
    }
    return $data;
} 

我不完全确定如何做到这一点,但是:

$imgcount = glob($directory.".{jpg,png,gif}", GLOB_BRACE);
$total_images = ($imgcount + $imgcount);

$vidcount = glob($directory.".{mp4}", GLOB_BRACE);
$total_videos = ($vidcount + $vidcount);

请记住,我正在组合数十个,数百个甚至数千个目录,我将如何获得正确的计数?

更新

我需要函数存在于main函数之外,因为我只调用我输出的特定页面上列出的函数。我希望计数存在于其他页面上,我不会递归显示结果。

1 个答案:

答案 0 :(得分:0)

您可以做的是使用关联数组。

std::vector<int> Add(std::vector<int> op1, std::vector<int> op2)

然后:

$i = 0;      
$filesCount = array();
$entries = scandir($directory);

最后:

                 $ext = $pathInfo['extension'] ;
                if (!empty($ext)) {
                    if (!isset($filesCount[strtolower($ext)]) {
                        $filesCount[strtolower($ext)] = 0;                            
                    }
                    $filesCount[strtolower($ext)]++;
                    $name .= "." . $ext;