You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多维数组生成按年月归档的Y-m-d.json文件问题求助

修正PHP日志归档JSON文件的代码实现

你当前的archiveJSON()函数问题出在遍历过程中没有精准提取单日期的分组数据,而是将整个多维日志数组写入了每个文件。下面是完全匹配需求的修正代码:

function archiveJSON(array $logData): void
{
    // 遍历年份维度
    foreach ($logData as $year => $months) {
        // 遍历月份维度
        foreach ($months as $month => $days) {
            // 构建年/月目录路径
            $dirPath = "{$year}/{$month}";
            // 递归创建多级目录(不存在则创建)
            if (!is_dir($dirPath)) {
                mkdir($dirPath, 0755, true);
            }
            
            // 核心遍历:处理每个日期的独立分组数据
            foreach ($days as $date => $groupData) {
                $filePath = "{$dirPath}/{$date}.json";
                $existingData = [];
                
                // 读取已存在的文件数据
                if (file_exists($filePath)) {
                    $jsonContent = file_get_contents($filePath);
                    // 解析失败时 fallback 为空数组
                    $existingData = json_decode($jsonContent, true) ?: [];
                }
                
                // 合并新旧数据:递归合并分组(如需覆盖相同分组,替换为array_merge)
                $mergedData = array_merge_recursive($existingData, $groupData);
                
                // 写入格式化后的JSON文件
                file_put_contents($filePath, json_encode($mergedData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
            }
        }
    }
}

关键修正说明

  • 单日期数据提取:最内层循环直接遍历每个月份下的日期集合,每次仅处理当前日期对应的分组数据,彻底解决“全部数据写入每个文件”的问题
  • 目录自动创建:通过mkdir的第三个参数true递归创建年/月目录,无需手动提前创建目录
  • 数据合并策略:使用array_merge_recursive实现分组数据的深度合并;如果需求是相同分组名直接覆盖原有数据,将其替换为array_merge即可
  • JSON优化:添加JSON_PRETTY_PRINT让生成的JSON文件更易读,JSON_UNESCAPED_UNICODE确保中文等特殊字符正常存储

内容的提问来源于stack exchange,提问作者Cem Firat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:01:02