小弟最近想要遍历一个文件夹,文件夹中的内容是按照日期自己增加的,为了防止数量过大而造成遍历卡死,所以加了个保护机制,遍历1000次就停止了。现在就有个问题,比如我有1300个文件,那我只能找出0-1000个文件,即不是最新的记录,如何才能遍历出400-1300的记录呢?本身使用递归做的,代码如下:function myreaddir($dir, $fileName=array(), $total=1000){
$handle=opendir($dir);
$i = count($fileName);
while($file=readdir($handle)){
if(($file!=".") && ($file!="..")){
$fullpath=$dir."\\".$file;
if($i == $total){
break;
}
if(!is_dir($fullpath)){
if(fileext($fullpath) == 'avi'){
$fileName[$i][0] = $fullpath;
$fileName[$i][1] = _toByteString(filesize($fullpath), 2);
$i++;
}
}else{
$fileName = myreaddir($fullpath, $fileName, $total);
}
}
}
closedir($handle);
return   $fileName;
}
或者有其他好的方法能实现本功能的望大侠指点。

解决方案 »

  1.   

    $i    =    count($fileName);
    $j=0;//加一个计数器  遍历一个文件就加1,加到400才开始把文件名保存起来。
        while($file=readdir($handle)){
            if(($file!=".") && ($file!="..")){
                $fullpath=$dir."\\".$file;
                if($i == $total){
                    break;
                }
                if(!is_dir($fullpath)){
                    if(fileext($fullpath) == 'avi'){
                        $fileName[$i][0]    =    $fullpath;
                        $fileName[$i][1]    =    _toByteString(filesize($fullpath), 2);
                        $i++;
                       
                    }
                }else{
                    $fileName    =    myreaddir($fullpath, $fileName, $total);
                }
            }
        }
      

  2.   

    function myreaddir($dir, $fileName=array(), $total=1000){
        $handle=opendir($dir);
        $i    =    count($fileName);
        while($file=readdir($handle)){
            if(($file!=".") && ($file!="..")){
                $fullpath=$dir."\\".$file;
    //            if($i == $total){
    //                break;
    //            }
                if(!is_dir($fullpath)){
                    if(fileext($fullpath) == 'avi'){
                        if(count($fileName) > $total) array_shift($fileName); //*** 注意这里 **
                        $fileName[$i][0]    =    $fullpath;
                        $fileName[$i][1]    =    _toByteString(filesize($fullpath), 2);
                        $i++;
                    }
                }else{
                    $fileName    =    myreaddir($fullpath, $fileName, $total);
                }
            }
        }
        closedir($handle);
        return   $fileName;
    }
      

  3.   

    你的意思是想取后面的 N 个文件吧???那就是对 j 这个数计算吧。。总数-N=J 。
      

  4.   

    函数里面加一个static变量判断。