使用glob方法获取文件夹名称

时间:2018-09-21 10:33:33

标签: php

我正在遍历带有嵌套文件夹的图像文件夹来查找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);

1 个答案:

答案 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);

但是在内部,您必须检查扩展名是否符合您的期望。


手册

The SplFileInfo class

The RecursiveIteratorIterator class