PHP递归函数-递增总值
我有这个问题 让我们假设我有一系列的文件夹,在这些文件夹中,他们有无限的子文件夹,你可以在其中有无限的文件 使用递归,我试图获取子目录中存在的所有文件的数量,以及直接从子目录中获取文件的总数 我正在使用以下工具:PHP递归函数-递增总值,php,recursion,Php,Recursion,我有这个问题 让我们假设我有一系列的文件夹,在这些文件夹中,他们有无限的子文件夹,你可以在其中有无限的文件 使用递归,我试图获取子目录中存在的所有文件的数量,以及直接从子目录中获取文件的总数 我正在使用以下工具: $SubSectionTotalCount = 0; $SubSectionComplete = 0; function GetStats($child, $groups, $progress, $resCount, $complete) { foreach($child-&
$SubSectionTotalCount = 0;
$SubSectionComplete = 0;
function GetStats($child, $groups, $progress, $resCount, $complete)
{
foreach($child->children as $childElement)
{
if($childElement->resources != null)
{
foreach($childElement->resources->groups as $groupss)
{
if(Check($groupss->id, $groups))
{
if(array_key_exists($childElement->parent_id, $progress))
{
if(array_key_exists($childElement->resources->id, $progress[$childElement->parent_id]['tasks']))
{
$complete++;
}
}
$resCount++;
var_dump($resCount);
}
}
}
GetStats($childElement, $groups, $progress, $resCount, $complete);
}
}
Getting here
Getting here
Getting here
Getting here
我目前有4个部分(因此,resCount
应打印4个部分),但我得到的是:
int 1
int 2
int 3
int 2
如果我不增加变量,只是var\u dump(“getting here”)
我会得到以下结果:
$SubSectionTotalCount = 0;
$SubSectionComplete = 0;
function GetStats($child, $groups, $progress, $resCount, $complete)
{
foreach($child->children as $childElement)
{
if($childElement->resources != null)
{
foreach($childElement->resources->groups as $groupss)
{
if(Check($groupss->id, $groups))
{
if(array_key_exists($childElement->parent_id, $progress))
{
if(array_key_exists($childElement->resources->id, $progress[$childElement->parent_id]['tasks']))
{
$complete++;
}
}
$resCount++;
var_dump($resCount);
}
}
}
GetStats($childElement, $groups, $progress, $resCount, $complete);
}
}
Getting here
Getting here
Getting here
Getting here
因此,递归是有效的,但是我不明白为什么递增不能产生所需的输出?我不确定我是否正确地阅读了您的代码,但在我看来,您似乎试图修改函数内部的值,但该值不会在函数外部返回。
基本上,您应该通过引用(使用&)而不是通过值(这就是您在这里所做的),或者更好的选择是重构代码,以便您的函数返回一个值,而不是尝试更改一个值。这似乎是我的问题。在PHP中递归遍历目录有两种常用方法。主要使用或/ 在这两者之间,迭代器方法是文件遍历的更直接的表示。如果可以的话,试着习惯使用迭代器 通用递归全局方法(PHP4+) 通用递归迭代器方法(PHP5+)
如果你在目录中递归,你应该看看PHP的一些内置类,比如它对这类东西很有帮助。非常感谢!我忘了我可以通过引用传递价值。。多么愚蠢,但谢谢你:)--被接受的回答