我正在遍历带有嵌套文件夹的图像文件夹来查找glob。结构如下:
-> images
-> John Doe (some names)
-> 21-09-2018 (some dates)
-> 23-09-2018 (some dates)
现在,我想获取“名称”文件夹的名称和图像所在的“日期”文件夹的名称。如何在现有循环中获取它们并将其推入数组?
$fileArray = [];
$path = 'http://example.com/demo';
foreach (glob("images/*/*/*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE) as $curFilename)
{
$completePath = $path . '/' . $curFilename;
$FilenameWithoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', basename($curFilename));
$basename = basename($curFilename);
if (strpos($FilenameWithoutExt, 'R') !== false) {
$eye = 'R';
}
else if (strpos($FilenameWithoutExt, 'L') !== false) {
$eye = 'L';
} else {
$eye = '';
}
$caption = $eye . ' - ' . date("d.m.Y");
$curFileObj = new mFile;
$curFileObj->caption = $caption;
$curFileObj->url = $completePath;
$curFileObj->thumbUrl = $completePath;
$curFileObj->date = date("d.m.Y");
$curFileObj->eye = $eye;
$curFileObj->basename = $basename;
array_push($fileArray, $curFileObj);
}
echo json_encode($fileArray);
答案 0 :(得分:1)
SplFileInfo
您可以仅通过文件路径名创建SplFileInfo
对象。
例如:
$file = new SplFileInfo($curFilename);
echo $file->getPath();
将输出文件的路径。
您可以使用更多方法,我认为您应该在此对象中找到所需的一切。
RecursiveIteratorIterator
还有类似RecursiveIteratorIterator
的东西,它将返回SplFileInfo
的数组,而不是像glob()
这样的字符串路径名。
您可以像这样使用它:
$dir_iterator = new RecursiveDirectoryIterator('images/*/*/');
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
但是在内部,您必须检查扩展名是否符合您的期望。
手册