Как осуществить цикличный проход по каталогу и занесение файлов в массив?

Например, есть следующая структура каталогов
cat
  dir1
    subdir1
     /* иные папки или файлы*/
    subdir2
     /* иные папки или файлы*/
  dir2
   subdir3
     /* иные папки или файлы*/
   subdir4
     /* иные папки или файлы*/


Нужно занести все имена конечных файлов (т.е только файлов) в массив.
Я пытался мудрить что-то с циклами и scandisc, только ничего толком не вышло.
Заранее спасибо.
  • Вопрос задан
  • 2806 просмотров
Решения вопроса 1
morozovdenis
@morozovdenis
fucntion getFileNames($root)
{
    $out = array();
    $files = scandir($root);
    for ($i = 0; $i < count($files); $i++)
    {
        $name = $files[$i];
        if ($name == "." || $name == "..")
        {
            continue;
        }
        if (is_dir($root . "/" . $name))
        {
            $out = array_merge($out, getFileNames($root . "/" . $name));
        }
        else
        {
             $out[] = $name;
        }
    }
    return $out;
}

версия без рекурсии
function convertArray($array, $path)
{
	$result = array();
	for ($i = 0; $i < count($array); $i++)
	{
		$result[] = $path . "/" . $array[$i];
	}
	return $result;
}

fucntion getFileNames($root)
{
	$out = array();
	$files = convertArray(scandir($root), $root);
	while (count($files))
	{
		$path = array_shift($files);
		
		if (basename($path) == "." || basename($path) == "..")
		{
			continue;
		}
		
		if (is_dir($path))
		{
			$files = array_merge($files, convertArray(scandir($path), $path);)
		}
		else
		{
			$out[] = basename($name);
		}
	}
	
	return $out;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
anyd3v
@anyd3v
Вопрос решается с помощью рекурсии и простейшим алгоритмом прохода по дереву
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы