函数中的基本算术不起作用

Posted

技术标签:

【中文标题】函数中的基本算术不起作用【英文标题】: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 的最终返回值? 【参考方案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 将作为上层目录计数的一部分再次被除。 您可以将此函数包装在另一个将最终计数除以一次并返回的函数中。在这种情况下,跟踪目录深度对我来说似乎开销太大,尽管这也是一种选择。

【讨论】:

以上是关于函数中的基本算术不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试在触发器上使用算术,但我的触发器不起作用

我的算术表达式在 CMD FOR 循环中不起作用 [重复]

重定向到外部 Javascript 函数中的 URL 不起作用

为啥我的基本指数函数不起作用? [关闭]

自定义函数不起作用,但逐行起作用

KNeighborsClassifier .predict() 函数不起作用