You need to enable JavaScript to run this app. PHP如何删除TXT文件中结束日期早于当前日期的行
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何删除TXT文件中结束日期早于当前日期的行

原代码的核心问题
  • 逻辑方向完全偏差:原代码仅判断行内是否存在和当前日期字符串完全相等的内容,既不会保留End-date晚于当前日期的行,也不会删除早于当前日期的行,和需求目标不匹配
  • 格式拼接缺陷:直接拼接$out变量时没有为每个保留行追加换行符,写回文件后所有有效内容会被挤成连续的一整行,破坏原文件排版
  • 变量初始化缺失:$out初始值未定义,在开启PHP严格报错的运行环境下会抛出未定义变量的告警
可正确实现需求的代码

处理逻辑为逐行提取End-date标记后的日期值,转换为时间戳和当前日期对比,仅删除结束日期早于当前日期的行,兼容行内End-date前后存在不同数量空格的排版场景:

$fname = "test.txt";
// 读取文件所有行,去掉每行末尾的换行符
$lines = file($fname, FILE_IGNORE_NEW_LINES);
// 取当前日期零点的时间戳作为对比基准
$currentTimestamp = strtotime(date("Y-m-d"));
$out = '';

foreach ($lines as $line) {
    // 匹配提取行内的End-date日期值,兼容标记前后的多空格情况
    if (preg_match('/#End-date\s*=\s*(\d{4}-\d{2}-\d{2})/', $line, $match)) {
        $endTimestamp = strtotime($match[1]);
        // 保留结束日期大于等于当前日期的行
        if ($endTimestamp >= $currentTimestamp) {
            $out .= $line . PHP_EOL;
        }
    } else {
        // 无End-date标记的行默认保留,避免误删有效内容
        $out .= $line . PHP_EOL;
    }
}

// 覆盖写入处理后的文件内容
file_put_contents($fname, $out);

按你提供的测试样例,如果当前日期为2021-04-20,处理后会自动移除End-date为2021-04-18、2021-04-19的两行,仅保留End-date为2021-04-30的行。

内容的提问来源于stack exchange,提问作者Muhammad Yahya Imran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 09:54:03