Игра с каталогами и файлами, какими вы есть, часто бывает сложной. В идеале данные должны отображаться в БД, поэтому у вас должны быть ссылки на каждый каталог и данные в нем. Когда вы загружаете изображение, поле таблицы будет иметь истинное значение и т. Д.
Однако, работая с обходом структуры каталогов, поскольку это то, что у вас есть, вы можете изменить структуру вашего массива, чтобы иметь доступ к более удобным идентификаторам (ключам) и иметь непустые каталоги в массиве. Такие как:
[0]
[
'category' => 'Ceramic',
'name' => 'white test',
'imageName' => 'Preview.jpg',
],
[1]
[
'category' => 'whatever',
'name' => 'something',
'imageName' => 'image.jpg',
],
Обратите внимание, что нет «бетона - асфальта», потому что если нет файлов, то его нет в массиве, тогда вы можете просто зациклить массив, зная, что в нем должны быть данные.
Если вам по какой-то причине нужно имя директора, имейте идентификатор, что каталог был пустым, например:
[0]
[
'category' => 'Ceramic',
'name' => 'white test',
'imageName' => 'Preview.jpg',
'hasValues' = true,
],
[1]
[
'category' => 'Concrete - Asphalt',
'hasValues' = false,
],
Затем вы можете проверить, истинно ли hasValues
и т. Д.
Вот быстрый скрипт, который может помочь, настроит этот массив. Возможно, есть более чистый способ, но без БД это довольно прилично imo
function getAllFromDir($dirToSearch)
{
return new FilesystemIterator($dirToSearch, FilesystemIterator::SKIP_DOTS);
}
function listFolderFiles($dirToSearch)
{
$allFileLists = [];
$allDirs = getAllFromDir($dirToSearch);
$newKey = 0;
$imageTypes = ['jpg', 'jpeg', 'png'];
foreach ($allDirs as $dir) {
$allFileLists[$newKey]['category'] = (string) $dir->getFilename();
$parentSubDir = getAllFromDir($dir);
if (iterator_count($parentSubDir) < 1) {
$allFileLists[$newKey]['hasFiles'] = false;
$newKey++;
continue;
}
foreach ($parentSubDir as $subDir) {
$allFileLists[$newKey]['name'] = (string) $subDir->getFilename();
$files = getAllFromDir($subDir);
foreach ($files as $file) {
$ext = (string) $file->getExtension();
$keyName = in_array($ext, $imageTypes) ? 'image' : $ext;
$allFileLists[$newKey][$keyName] = (string) $file->getFilename();
}
$allFileLists[$newKey]['hasFiles'] = true;
$newKey++;
}
}
return $allFileLists;
}
Для структуры DIR:
[dir] concrete
[dir] fabric
[dir] white test2
[file] image.jpg
[file] testfile.sbsar
Тогда вышеприведенный скрипт выведет следующее:
(
[0] => Array
(
[category] => fabric
[name] => white test2
[image] => image.jpg
[sbsar] => testfile.sbsar
[hasFiles] => true
)
[1] => Array
(
[category] => concrete
[hasFiles] => false
)
)