Как исправить рекурсию в логике поиска папок и файлов?
Реализация логики поиска файла по папкам через класс и рекурсию. В классе объявлен метод getDirect, принимающий пустой массив. С помощью scandir получаеv список файлов и каталогов, расположенных по указанному пути (приходит в качестве аргументов). Если в указанном списке есть директория, то вызывается снова getDirect (рекурсия). В массив попадает только не пустой файл. ПРОБЛЕМА - рекурсия не останавливается, то есть запускается вечный цикл, несмотря на то, что условие работает. Я не пойму почему рекурсия не останавливается, то есть программа зависает. Помогите разобраться. Хочу реализовать программу именно через рекурсию, а не циклом или иным способом. Дерево файлов обычное files/fiels2/fiels3 - в папках лежат readme.txt, один из которых заполнен текстом.
$searchRoot = 'files';
$searchName = 'readme.txt';
$searchResult = array();
class SearchDir
{
public string $dir, $name;
public function __construct($dir, $name)
{
$this->dir = $dir;
$this->name = $name;
}
public function getDirect(array &$arr): array
{
$dirArr = scandir($this->dir);
foreach ($dirArr as $elem) {
$files = $this->dir . DIRECTORY_SEPARATOR . $elem;
if ($elem == '.' || $elem == '..') {
continue;
}
if (is_dir($files)) {
// $this->getDirect($arr);
} elseif ($elem == $this->name) {
$arr[] = $files;
}
}
return $arr = array_filter($arr, fn($a) => filesize($a) > 0);
}
}
$searchFiles = new SearchDir($searchRoot, $searchName);
var_dump($searchFiles->getDirect($searchResult));