McOuni
Guest
Корявый рекурсивный обход всех директорий
Нужно сделать рекурсивный обход всех директорий содержащихся начиная с заданной ($dir), чтобы на выходе получить нечто подобное:
$opt_array[0] = "directory1";
$opt_array[1] = "directory2";
$opt_array[2] = "directory2 / subdirectory01";
$opt_array[3] = "directory2 / subdirectory01 / subdirectory02";
$opt_array[4] = "directory3";
$opt_array[5] = "directory3 / subdirectory01";
$opt_array[6] = "directory3 / subdirectory01 / subdirectory02 / subdirectory03";
и так далее
Вот как это сделал я:
Но код мягко говоря уродлив по своему строению и на выходе выводит кривой массив с пропущенными ключами, хотя и содержащий все элементы.
Как мне упростить эту функцию. А то кажись я чегот намудрил
Нужно сделать рекурсивный обход всех директорий содержащихся начиная с заданной ($dir), чтобы на выходе получить нечто подобное:
$opt_array[0] = "directory1";
$opt_array[1] = "directory2";
$opt_array[2] = "directory2 / subdirectory01";
$opt_array[3] = "directory2 / subdirectory01 / subdirectory02";
$opt_array[4] = "directory3";
$opt_array[5] = "directory3 / subdirectory01";
$opt_array[6] = "directory3 / subdirectory01 / subdirectory02 / subdirectory03";
и так далее
Вот как это сделал я:
PHP:
function folders($dir)
{
if ($handle = opendir($dir))
{
$r = 0;
while (false !== ($dir2 = readdir($handle)))
{
if ($dir2 != "." AND $dir2 != "..")
{
if (is_dir($dir.$dir2))
{
$opt_array[$r] = $dir2;
$bet = folders($dir.$dir2 . "/");
foreach ($bet as $y)
{
$r++;
$opt_array[$r] = $dir2 .'/'. $y;
}
}
}
$r++;
}
closedir($handle);
return $opt_array;
}
Как мне упростить эту функцию. А то кажись я чегот намудрил