PHP 文件写入去重:避免重复追加数据的完整解决方案-php教程

本文详解如何在 php 中向文件写入数组数据时防止重复追加,涵盖清空重写、内容比对去重两种策略,并提供可直接运行的代码示例与关键注意事项。

在使用 file_put_contents() 向文件写入数据时,若反复执行且始终传入 FILE_APPEND 标志,就会导致历史数据不断累积——正如问题中所示:每次运行脚本,Fanny, 1034 等记录都被重复追加,造成数据冗余。根本原因在于:FILE_APPEND 仅负责“追加”,不负责“判断是否已存在”。

✅ 方案一:覆盖写入(适用于每次全量更新场景)

若每次运行脚本都应以当前 $result 数组为唯一权威数据源(即旧数据完全失效),最简单高效的方式是移除 FILE_APPEND,让 file_put_contents() 默认以覆盖模式写入:

$dir = "C:/Users/<users>/data";
if (!is_dir($dir)) {
    mkdir($dir, 0777, true); // 添加第三个参数 true 支持递归创建
}

$dataLines = [];
foreach ($result as $item) {
    // 注意:原代码中误用了 $data(应为 $asset),且部分键名为 asset_no
    $name  = $item[0]['name'] ?? '';
    $asset = $item[0]['asset'] ?? $item[0]['asset_no'] ?? '';
    $dataLines[] = "$name, $asset";
}

// 覆盖写入(无 FILE_APPEND)→ 自动清除旧内容
file_put_contents("$dir/data", implode("\r\n", $dataLines) . "\r\n");

✅ 优点:简洁、高效、无读取开销;
⚠️ 注意:确保 $result 始终包含完整最新数据集,否则会丢失未包含的条目。

✅ 方案二:智能去重追加(适用于增量更新或需保留历史逻辑)

若需保留文件中已有数据,并仅追加 $result 中尚未存在的新记录(例如按 name 或 name+asset 组合去重),则需先读取并解析现有内容:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP 文件写入去重:避免重复追加数据的完整解决方案-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4036373+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4036374+
  • 本周更新: 0+
  • 最后更新: 2026-03-16