【问题标题】:Basic arithmetic within a function not working函数中的基本算术不起作用
【发布时间】:2017-04-05 04:24:58
【问题描述】:

我有一个 PHP 函数用于计算目录中的文件数。

function getFileCount($path) {
$size = 0;
$ignore = array('.','..','cgi-bin','.DS_Store');
$files = scandir($path);
foreach($files as $t) {
    if(in_array($t, $ignore)) continue;
    if (is_dir(rtrim($path, '/') . '/' . $t)) {
        $size += getFileCount(rtrim($path, '/') . '/' . $t);
    } else {
        $size++;
    }   
}
return $size;
}

这可以正常工作,但我需要在返回之前将 $size 除以 2。

如果我这样做'return $size / 2;'然后 60 变为 22.5。 72 变为 19.125。这对我来说没有意义。我也尝试过 intdiv(),尝试乘以 0.5 等,我得到了不同的结果,但没有一个是正确的。

我知道这可能是非常基本的东西。

如果我在函数之外进行除法,它可以正常工作,但我想在返回整数之前处理它。

【问题讨论】:

  • 您正在递归调用它,因此您的某些结果被多次划分。
  • 计算数组并​​减去静态。我想,它会节省循环的额外工作
  • 据我所知,我需要它是递归的,以便子目录中的文件也可以计算在内。有什么方法可以将除法应用于 $size 的最终返回值?

标签: php integer division integer-division


【解决方案1】:

你能创建一个包装函数吗?

function getFileCountDivided($path) {
    return getFileCount($path) / 2;
}

【讨论】:

  • 我刚刚尝试过,它也返回了相同的错误值(60/2 = 22.5 等)
  • 如果你这样做,你会得到什么 $x = getFileCount($path); var_dump($x);我得到 int 60,它对我来说很好
  • 这确实有效,但是 int() 也会被打印出来。有没有办法摆脱它?
  • 我只建议出于调试目的。我认为该部门正在工作,但是在您回显输出的地方出了点问题,您能否显示更多的调用代码
  • 我在 WordPress 查询循环中调用它。我在这里也尝试了一些变体,但最相关的一点是: $path = getcwd() 。 '/wp-content/uploads/screenshots/' 。 $类。 '/'; echo getFileCountDivided($path);
【解决方案2】:

这可能是由于递归的原因,子目录计数除以 2 将作为上层目录计数的一部分再次被除。 您可以将此函数包装在另一个将最终计数除以一次并返回的函数中。在这种情况下,跟踪目录深度对我来说似乎开销太大,尽管这也是一种选择。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2012-03-12
    • 2014-02-14
    相关资源
    最近更新 更多