|
|
|
| Как сделать счётчик для рекурсивной функции?
Т.е. чтобы не просто выводил папки, а рядом ставил номера:
1
1.1
1.2
2
3
3.1
3.2
3.3
3.4
3.4.1
3.4.2
|
Спасибо. | |
|
|
|
|
|
|
|
для: Maxam
(02.05.2011 в 23:29)
| | Можно объявить счетчики глобальными при помощи ключевого слова global. | |
|
|
|
|
|
|
|
для: cheops
(02.05.2011 в 23:31)
| | Я делал, но получилась нереально сложная и непонятная конструкция в коде и неверный результат:
1
1.1
1.1.1
1.2.2
1.3.3
1.4.4
1.5.5
1.6.6
2.2
2.1.1
2.2.2
| Как видите не совсем то. | |
|
|
|
|
|
|
|
для: Maxam
(03.05.2011 в 03:21)
| | Схему рекурсивной функции приведите, если не сложно. | |
|
|
|
|
|
|
|
для: cheops
(03.05.2011 в 10:30)
| |
<?php
function recurs_dir($path)
{
static $depth = 0;
$dir = opendir($path);
while(($file = readdir($dir)) !== FALSE)
{
if($file == "." || $file == "..") continue;
echo str_repeat("-", $depth)." ".$file."<br>";
if(is_dir($path."/".$file))
{
$depth++;
recurs_dir($path."/".$file);
$depth--;
}
}
closedir($dir);
}
recurs_dir(".");
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(02.05.2011 в 23:29)
| | Давайте разобъем задачу на части, выделив функцию увеличения счетчика и создания нового уровня вложения. Тогда код для автоматической нумерации может выглядеть следующим образом.
<?php
// Рекурсивный обход каталогов
function recurs_dir($path, $depth = "")
{
// Устанавливаем новый уровень нумерации
$depth = depth_new($depth);
$dir = opendir($path);
while(($file = readdir($dir)) !== FALSE)
{
if($file == "." || $file == "..") continue;
// Увеличиваем глубину нумерации
$depth = depth_increase($depth);
echo "$depth $file<br />";
if(is_dir($path."/".$file))
{
// Рекурсивный вызов
recurs_dir($path."/".$file, $depth);
}
}
closedir($dir);
}
// Новый уровень нумерации
function depth_new($depth)
{
if(!empty($depth))
{
$arr = explode(".", $depth);
}
$arr[] = "0";
$depth = implode(".", $arr);
return $depth;
}
// Увеличиваем глубину нумерации
function depth_increase($depth)
{
if(!empty($depth))
{
$arr = explode(".", $depth);
}
else
{
$arr[] = 0;
}
// Увеличиваем последнее значение
$arr[count($arr) - 1]++;
$depth = implode(".", $arr);
return $depth;
}
// Вызов функции: точка входа программы
recurs_dir(".");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.05.2011 в 10:57)
| | О боже. Спасибо большое, буду сидеть и разбираться... дня 2 ) | |
|
|
|