Php 如何更改计数文件和目录的递归函数?

Php 如何更改计数文件和目录的递归函数?,php,Php,你好, 我有一个递归函数来计算文件和目录。它返回每个目录的结果。 但是我需要一个普通的结果。如何更改脚本 它返回: 有0个目录和3个文件。 有0个目录和1个文件。 有2个目录和14个文件 我想要: 有2个目录和18个文件。您可以从每个递归调用返回值,然后将这些值相加并返回给调用方 <?php function scan_dir($dirname) { $file_count = 0 ; $dir_count = 0 ; $dir = opendir($dirnam

你好,
我有一个递归函数来计算文件和目录。它返回每个目录的结果。
但是我需要一个普通的结果。如何更改脚本
它返回:
有0个目录和3个文件。
有0个目录和1个文件。
有2个目录和14个文件
我想要:

有2个目录和18个文件。

您可以从每个递归调用返回值,然后将这些值相加并返回给调用方

<?php
function scan_dir($dirname)   {
$file_count = 0 ;     
$dir_count = 0 ;      
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false) {
if($file != "." && $file != "..")  {
if(is_file($dirname."/".$file))
++$file_count;
if(is_dir($dirname."/".$file)) {
++ $dir_count;
scan_dir($dirname."/".$file);
}
}
}
closedir($dir);
echo "There are $dir_count catalogues and $file_count files.<br>";
}

$dirname = "/home/user/path";
scan_dir($dirname);
?>  


代码将为您提供每个项目的净计数

您可以从每个递归调用返回值,并将这些值相加返回给其调用方

<?php
function scan_dir($dirname)   {
$file_count = 0 ;     
$dir_count = 0 ;      
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false) {
if($file != "." && $file != "..")  {
if(is_file($dirname."/".$file))
++$file_count;
if(is_dir($dirname."/".$file)) {
++ $dir_count;
scan_dir($dirname."/".$file);
}
}
}
closedir($dir);
echo "There are $dir_count catalogues and $file_count files.<br>";
}

$dirname = "/home/user/path";
scan_dir($dirname);
?>  


代码将为您提供每个项目的净计数

你可以用它来整理代码


你可以用它来整理代码


只需简单的修改。例如,将计数保留在一个数组中,您可以从函数返回该数组,将其与以前的计数相加,如下所示:

$dirs = new RecursiveIteratorIterator(
          new RecursiveDirectoryIterator(dirname(__FILE__))
        , TRUE);

$dirsCount = $filesCount = 0;

while ($dirs->valid()) {

    if ($dirs->isDot()) {
       $dirs->next();
    } else if ($dirs->isDir()) {
        $dirsCount++;
    } else if ($dirs->isFile()) {
        $filesCount++;
    }
    $dirs->next();
}

var_dump($dirsCount, $filesCount);

只需简单修改。例如,将计数保留在一个数组中,您可以从函数返回该数组,将其与以前的计数相加,如下所示:

$dirs = new RecursiveIteratorIterator(
          new RecursiveDirectoryIterator(dirname(__FILE__))
        , TRUE);

$dirsCount = $filesCount = 0;

while ($dirs->valid()) {

    if ($dirs->isDot()) {
       $dirs->next();
    } else if ($dirs->isDir()) {
        $dirsCount++;
    } else if ($dirs->isFile()) {
        $filesCount++;
    }
    $dirs->next();
}

var_dump($dirsCount, $filesCount);

在我的选项中,您应该将计数文件和计数目录分离为两个不同的函数。它会把事情弄清楚:

<?php
function scan_dir($dirname)   {
    $count['file'] = 0;
    $count['dir'] = 0;
    $dir = opendir($dirname);
    while (($file = readdir($dir)) !== false) {
        if($file != "." && $file != "..")  {
            if(is_file($dirname."/".$file))
                $count['file']++;
            if(is_dir($dirname."/".$file)) {
                $count['dir']++;
                $counts = scan_dir($dirname."/".$file);
                $count['dir'] += $counts['dir'];
                $count['file'] += $counts['file'];
            }
        }
    }
    closedir($dir);

    return $count;
}

$dirname = "/home/user/path";
$count = scan_dir($dirname);
echo "There are $count[dir] catalogues and $count[file] files.<br>";
?>  


目录计数函数类似。

在我的选项中,您应该将计数文件和计数目录分离为两个不同的函数。它会把事情弄清楚:

<?php
function scan_dir($dirname)   {
    $count['file'] = 0;
    $count['dir'] = 0;
    $dir = opendir($dirname);
    while (($file = readdir($dir)) !== false) {
        if($file != "." && $file != "..")  {
            if(is_file($dirname."/".$file))
                $count['file']++;
            if(is_dir($dirname."/".$file)) {
                $count['dir']++;
                $counts = scan_dir($dirname."/".$file);
                $count['dir'] += $counts['dir'];
                $count['file'] += $counts['file'];
            }
        }
    }
    closedir($dir);

    return $count;
}

$dirname = "/home/user/path";
$count = scan_dir($dirname);
echo "There are $count[dir] catalogues and $count[file] files.<br>";
?>  


目录计数函数与此类似。

我认为您需要澄清一下给定的输入和预期的输出。另外,适当地缩进你的脚本将有助于帮助试图帮助你阅读它的人。我认为你需要澄清一下你给定的输入和预期的输出。此外,适当缩进脚本有助于帮助试图帮助您阅读脚本的人。如果他们想知道dirs计数和files计数之间的区别,该怎么办?在这种情况下,您将需要维护一个具有两个不同计数的结构并返回该结构。如果他们想知道dirs计数和files计数之间的差异,该怎么办?在这种情况下,您将需要维护一个具有两个不同计数的结构并返回该结构。