循环通过dirs并比较日期以获得大日期

时间:2014-02-14 08:05:53

标签: php function loops recursion

我已经在我的问题中使用了这个函数,所以我需要再次使用它,但问题是不同的。 这是功能:

public function loopThroughDirs($dir)
{      
  $timeMod = filectime($dir);
  $dateMod = ($timeMod) ? date("d-m-Y H:i:s", $timeMod) : ' - ';

if($handle = opendir($dir)){
    while (false !== ($entry = readdir($handle))) {
        if ( $entry != "." && $entry != "..") {
            if(is_dir($dir.$entry)){
                $this->loopThroughDirs($dir.$entry.'/');
            } 
       }
    } 
    closedir($handle);
} 

var_dump($timeMod);

 }

所以这是递归功能让我可以通过目录,当我

  

的var_dump()

  

$ timeMod

它显示了每个文件夹的秒数。

我需要互相检查每个文件夹作为函数循环,这样我才能获得最大的$ timeMod 并将其放在我的 $ defaultDate ,(把它放在同一个函数中)这样的东西:

$defaultDate = 0;
if ($timeMod > $defaultDate){
$defaultDate = $timeMod;
}

所以我尝试将其插入到我的功能中,但每当我调用功能时,它只返回日期( $ timeMod 我的父母dir。 我需要帮助才能理解这一点,谢谢。

1 个答案:

答案 0 :(得分:0)

你必须使$defaultDate变量静态。此外,您必须在每次外部调用函数时将其重置为0。 所以代码应该是这样的:

public function loopThroughDirs($dir, $level = 0)
{
    static $defaultDate = 0;
    if (!$level) $defaultDate = 0;
    if ($timeMod > $defaultDate) $defaultDate = $timeMod;
    $timeMod = filectime($dir);
    $dateMod = ($timeMod) ? date("d-m-Y H:i:s", $timeMod) : ' - ';

    if ($handle = opendir($dir))
    while (false !== ($entry = readdir($handle))) {
        if ( $entry != "." && $entry != "..") {
            if(is_dir($dir.$entry)){
                $this->loopThroughDirs($dir.$entry.'/', $level+1);
            } 
       }
    }
    closedir($handle);
    var_dump($timeMod);
    return $defaultDate;
}