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的一些内置类,比如它对这类东西很有帮助。非常感谢!我忘了我可以通过引用传递价值。。多么愚蠢,但谢谢你:)--被接受的回答