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
相关产品推荐
相关产品推荐

