Доброго дня! Есть задача подсчитать количество файлов в директории и в поддиректориях. Я соорудил следующее, но что-то мне кажется, что запутался в трех соснах: Код (PHP): $dir = '/tmp' function count_files($dir){ $files1 = scandir($dir); if($i){$i = $i;}else{$i = 0;} foreach ($files1 as $key => $value){ if (!in_array($value, array(".", ".."))){ if(is_file($dir.'/'.$value)){$i = $i + 1;} if(is_dir($dir.'/'.$value)){count_files($dir.'/'.$value);} } } return $i; } echo count_files($dir); так выдает 0. как же правильно посчитать? Спасибо! PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Вот всегда так, думают, что новичок соображает на том же уровне, что и форумчане.... Нет чтобы просто подсказать, по нормальному... Вставлял я так: Код (Text): //if($i){$i = $i;}else{$i = 0;} ++$i; и так Код (Text): $i=0; все равно правильно не считает...
Ну так $i у тебя локальная переменная, вот она и не сохраняется между рекурсивными вызовами. Попробуй возвращаемое значение к ней плюсовать Код (PHP): function count_files($dir){ $files1 = scandir($dir); $i = 0; foreach ($files1 as $key => $value){ if (!in_array($value, array(".", ".."))){ if(is_file($dir.'/'.$value)){$i = $i + 1;} if(is_dir($dir.'/'.$value)){$i += count_files($dir.'/'.$value);} } } return $i; } От новичка ожидается, что он сначала с базовыми понятиями ознакомится, но видимо напрасно... Всё-таки в который раз убеждаюсь, что нельзя первым языком учить PHP, думать совсем не приучает... На форумах по Pascal или C настолько незнания основ программирования не встречается.
Да, я понял. При итерации (повторе) функции count_files переменная $i не сохраняется, так как она локальная. Поэтому она не суммировалась. А когда мы (то есть вы) влепили эту переменную до начала итерации функции, то она стала суммироваться.... Ура!!!
Не совсем. Переменная $i находится в стеке вызовов, поэтому не при каждой итерации, а при каждом вызове она создаётся по новой, а потом уничтожается. То есть сколько вызовов, столько переменных $i. Вы же пытались с ней работать, как будто она одна (кстати, так тоже можно было написать эту функцию, используя глобальные переменный или статические локальные, но мне так не нравится). Я же после каждого рекурсивного вызова прибавляю количество файлов, найденных в поддиректории к текущему. Соответственно, к примеру Код (Text): folder 1 --- count_files("folder1") $i =0 file1 count_files("folder1") $i = 1 folder2 count_files("folder2") $i = 0 file2 count_files("folder2") $i =1 file3 count_files("folder2") $i =2 count_files("folder2") return 2 $i = (count_files("folder1") $i) + count_files("folder2") = 1 + 2 = 3 count_files("folder1") return 3 Надеюсь, схема понятна