在php中循环计数文件两次

时间:2016-09-28 10:24:12

标签: php

我有以下搜索文件夹的功能,抓取所有不以"开头的文件和文件夹。"

$results = [];
function getDirCount($directory, &$results, $friend, $static_path) {
    $i = 0;      
    $entries = scandir($directory);
    foreach ($entries as $item) {
        if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
            $path = $directory . '/' . $item;
            $rel_path = $static_path . '/' . $item;
            if (is_dir($path)) {
                getDirCount($path, $results, $friend, $rel_path);
            } else {
                $i++;
                $pathInfo = pathinfo($path);
                $name = $pathInfo['filename'];
                $type = 'unknown';
                if (!empty($pathInfo['extension'])) {
                    $name .= "." . $pathInfo['extension'];
                    switch (strtolower($pathInfo['extension'])) {
                        case "gif":
                        case "jpg":
                        case "png":
                        case "jpeg":
                        case "bmp":
                        //etc..
                        $type = 'image';
                        break;
                        case "mp4":
                        $type = 'video';
                        break;
                    }
                }
                $tttt = filemtime($path);
                $data = [
                    'name' => $name,
                    'username' => $friend,
                    'path' => $rel_path,
                    'type' => $type,
                    'id' => $i,
                    'time' => date('F d Y h:i A', $tttt)
                ];
                $results[] = $data;
            }
        } 
    }
    return $data;
}

然后我创建了一个循环来计算所有文件。

$friend = strtolower($row['username']);
$directoryToScan = '/absolute/path/to/files/'.$friend;
$rel_path = '/relative/path/to/files/'.$friend;
$tree = getDirCount($directoryToScan, $data, $friend, $rel_path);
for($i=(count($data)-1)-($feed-1);$i>=(count($data)-10)-($feed-1);$i--){
    $c = 0;
    if ($data !== NULL) {
        if(($data[$i]['type']=='image') && ($data[$i]['username'] == $friend)) {
            $c++;
      }
      $photo_count=$c;
    }
}

我遇到的问题是,每个文件都被计算两次并输出两次。因此,如果我将文件放在用户目录中并进行检查,则计数将增加2。如果我丢弃5个文件,则计数增加10。

我也尝试将$ c = 0移到for语句之前,但是即使有几十个结果,它似乎无限期地返回1。显然我希望获得正确的文件数。

更新

添加更多代码以帮助解释$ feed是什么。

在一个页面上,我有以下ajax请求。

<script>
    var feed;
    function loadmorefeed() {
        if (feed === undefined || feed === null || feed == '') { feed = 0; }
        feed = feed + 1;
        $.ajax({
            'url': 'stream_feed.php',
            'type': 'get',
            'data': {
                'feed': feed
            },
            'success': function (data) {
                $('.get_stream').append(data);
                return;
            },
            'error': function (request, status, error) {
                return;
            }
        });
    }
    loadmorefeed(); loadmorefeed(); loadmorefeed();
</script>

然后在页面上进行计数我有

$feed=$_GET['feed'];

1 个答案:

答案 0 :(得分:0)

不清楚$ feed以及为什么要对文件进行计数。 要计算所有文件,您可以在功能

后使用下面的内容
//GIVES YOU THE TOTAL COUNT
$TotaFilesScaned = count($data);


//TO GET THE COUNT OF IMAGES ONLY  
$photo_count = 0;
for($i=0; $i<$TotaFilesScaned;$i++){
    if(isset($data[$i]) && ($data[$i]['type']=='image') && ($data[$i]['username'] == $friend)) 
    {
            $photo_count++;
    }
}
echo $photo_count;