Есть ли способ исключить папки, в которых отсутствуют некоторые файлы?
Например. У меня есть папки, такие как:
FolderA
aaa.php
bbb.php
ccc.php
FolderB
aaa.php
bbb.php
ccc.php
FolderC
aaa.php
FolderD
aaa.php
bbb.php
ccc.php
Я только хочу иметь FolderA
, FolderB
а также FolderD
(или исключить FolderC
) так как FolderC
не все ожидаемые файлы
Источник тока
$dirs = [];
$finder = new Finder();
$finder->directories()->in(__DIR__)->depth('== 0');
foreach ($finder as $directory){
$dirs [] = $directory->getRelativePathname();
}
print_r($dirs);
Токовый выход:
array(
[0] => FolderA
[1] => FolderB
[2] => FolderC
[3] => FolderD
)
Наивный подход:
<?php
require_once(__DIR__.'/vendor/autoload.php');
use Symfony\Component\Finder\Finder;
$dirs = [];
$finder = new Finder();
$finder->directories()->in(__DIR__)->depth('== 0');
$requiredFiles = ['aaa.php', 'bbb.php', 'ccc.php'];
foreach ($finder as $directory) {
$fullPath = $directory->getPathname();
// if one file is not in this directory, ignore this directory
foreach ($requiredFiles as $requiredFile) {
if (!file_exists($fullPath.'/'.$requiredFile)) {
continue 2;
}
}
$dirs[] = $directory->getRelativePathname();
}
print_r($dirs);
Это выведет это:
Array
(
[0] => FolderD
[1] => FolderB
[2] => FolderA
)
Если вы хотите, чтобы папки были заказаны, просто позвоните sort($dirs);
после foreach
блок.
Других решений пока нет …