函数中的基本算术不起作用
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 将作为上层目录计数的一部分再次被除。 您可以将此函数包装在另一个将最终计数除以一次并返回的函数中。在这种情况下,跟踪目录深度对我来说似乎开销太大,尽管这也是一种选择。
【讨论】:
以上是关于函数中的基本算术不起作用的主要内容,如果未能解决你的问题,请参考以下文章