[英]Code to create a nested array of all files in a directory & subdirectories with PHP is not working
[英]Create a double array from a directory's subdirectories followed by files
我有一个名为images的目录,其中包含子目录。 这些子目录中的每一个都包含图像。 我想做的是编写一个函数,该函数返回索引为$images[$subDirectory][$fileName]
的双$images[$subDirectory][$fileName]
数组,以使以后的迭代变得简单。
我尝试编写下面的代码,看起来似乎很好,但是我不得不添加如下代码:
if ($subName === "." || $subName === ".." || $subName === ".DS_Store") continue;
这让我觉得自己做错了。 有没有更好的方法可以解决此问题,或者这只是解决方案的必需部分?
function getImages($inDirectory) {
if (!is_dir($inDirectory))
failureExit("Not a directory: ".$inDirectory);
if (!$dir = opendir($inDirectory))
failureExit("Could not open: ".$inDirectory);
$out = array();
while (($subName = readdir($dir)) !== false) {
if ($subName === "." || $subName === ".." || $subName === ".DS_Store") continue;
if (is_dir($inDirectory."/".$subName)) {
if (!$subDir = opendir($inDirectory."/".$subName))
failureExit("Could not open: ".$inDirectory."/".$subDir);
$out[$subName] = array();
while (($subSubName = readdir($subDir)) !== false) {
if ($subSubName === "." || $subSubName === ".." || $subSubName === ".DS_Store") continue;
$out[$subName][$subSubName] = 0;
}
closedir($subDir);
}
}
closedir($dir);
return $out;
}
$images = getImages("images");
print_r($images);
如果使用RecursiveDirectoryIterator
,则可以利用SKIP_DOTS
标志跳过.
和..
不过,您仍然必须指定要跳过的任何自定义目录,例如.DS_Store
。
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(".",FileSystemIterator::SKIP_DOTS)
);
#note the leading './'
$skip_paths = array('./.DS_Store','./.SKIP_ME');
$images = array();
#$image an SPLFileInfo object
#http://php.net/manual/en/class.splfileinfo.php
foreach ($iterator as $image) {
if($iterator->getDepth() === 1 && !in_array($image->getPath(),$skip_paths))
$images[$image->getPath()][$image->getFilename()] = $image;
}
print_r($images);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.