计数器在php递归函数中

时间:2015-10-22 06:17:01

标签: php recursion counter

我已经查看了系统已经存在的问题,但无法找到问题的答案。我想在php递归函数中尝试一个计数器,它会查找并删除空文件夹。我在下面粘贴了一种回声非空的方式,因为" - "并清空" |"。毕竟它看起来还不错,但是如果要清除很多东西,那么屏幕上的一切都会变成乱码。相反,我希望查看已删除的文件夹数量。这是迄今为止使用StackOverflow编译的代码。有任何帮助吗?

function RemoveEmptySubFolders($path) {
    echo "–";
    $empty = true;
    foreach ( glob ( $path . DIRECTORY_SEPARATOR . "*" ) as $file ) {
        if (is_dir ( $file )) {
            if (! RemoveEmptySubFolders ( $file ))
                $empty = false;
        } else {
            $empty = false;
        }
    }
    if ($empty) {
        if (is_dir ( $path )) {
        // echo "Removing $path...<br>";
        rmdir ( $path );
        echo "|";
        }
    }
    return $empty;
}

2 个答案:

答案 0 :(得分:4)

只需将变量作为参考传递:

function recursive($path, &$directories, &$removed) {
    echo "-";
    $directories ++;
    $empty = true;
    foreach ( glob ( $path . DIRECTORY_SEPARATOR . "*" ) as $file ) {
        if (is_dir ( $file )) {
            if (! recursive ( $file, $directories, $removed ))
                $empty = false;
        } else {
            $empty = false;
        }
    }
    if ($empty) {
        if (is_dir ( $path )) {
            $removed++;
            echo "|";
        }
    }
    return $empty;
}

$path = "c:\exampledir";
$directories = 0;
$removed = 0;
recursive($path, $directories, $removed);
echo("<br>$directories, $removed");

你也可以使用全局变量,但这非常难看,每当你使用全局变量而不是标准变量时,小猫就会死掉。

答案 1 :(得分:0)

面向对象变体:

将所有内容放入一个类中并添加实例属性$checked$deleted,然后使用自制程序或(讨厌的代码)使用+= 1$var ++递增它们