如何使用PHP分别统计2021年各月份子目录下JSON文件guests字段总和
问题原因分析
- 第一个遍历月份目录的循环里,
$monthfiles变量被反复覆盖,循环结束后只会保留最后一个月份的JSON文件列表,9、10月的文件直接被遗漏 - 遍历文件的逻辑没有和月份绑定,全局累加的
$arr每次加入新JSON后都会全量遍历,导致访客数被重复计算,也无法按月份区分统计结果
修复后的代码
// 读取2021年下所有月份目录 $monthdirs = array_filter(glob('data/2021/*'), 'is_dir'); $tot_guests_monthes = []; foreach ($monthdirs as $monthdir) { // 初始化当月访客数为0 $current_month_total = 0; // 获取当前月份下所有JSON文件 $monthfiles = glob($monthdir . '/*.json'); foreach ($monthfiles as $monthfile) { $json_data = json_decode(file_get_contents($monthfile), true); // 累加当日访客数,加容错避免字段缺失报错 $current_month_total += $json_data['guests'] ?? 0; } // 存入当月总访客结果 $tot_guests_monthes[] = $current_month_total; } // 按顺序输出三个月的总访客数 foreach ($tot_guests_monthes as $tot_guests_month) { echo $tot_guests_month . '<br />'; }
补充说明
- 每个月份目录单独统计的逻辑,从根源避免了变量覆盖、重复累加的问题
- 最终输出顺序和目录
september、october、november的读取顺序一致,和你要求的9、10、11月统计结果顺序匹配
内容的提问来源于stack exchange,提问作者Jack Maessen
相关产品推荐
相关产品推荐

