以下以递归方式返回基于给定目录的图像和视频。为每个用户返回大量目录和文件。我想要做的是找出一种方法来计算从每个目录返回的图像和视频,并合并为用户返回的所有目录的结果。
$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函数之外,因为我只调用我输出的特定页面上列出的函数。我希望计数存在于其他页面上,我不会递归显示结果。
答案 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;