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

PHP文本行反向清理需求:修改代码保留含指定日期的行

实现仅保留指定日期行的PHP代码修改方案

没问题,我来帮你调整这段PHP代码的逻辑,实现只保留指定日期行的需求~

首先,原代码是删除包含当前服务器日期的行,我们需要把逻辑反转,同时修复原代码里未初始化变量的小问题。以下是修改后的完整代码:

$fname = "test.txt";
// 替换成你需要保留的指定日期,比如"2018-01-03";如果要保留当前日期,就改成$targetDate = date("Y-m-d");
$targetDate = "2018-01-03"; 
$out = ""; // 先初始化输出变量,避免PHP抛出未定义变量的警告
$lines = file($fname);

foreach ($lines as $line) {
    // 反转判断逻辑:只有行里包含目标日期时,才把它加入输出内容
    if (strstr($line, $targetDate)) {
        $out .= $line;
    }
}

$f = fopen($fname, "w");
fwrite($f, $out);
fclose($f);

关键修改点说明:

  • 初始化$out变量:原代码里$out一开始没赋值,运行时会触发PHP的「Undefined variable」警告,所以先给它设为空字符串。
  • 反转判断条件:把原代码的!strstr(...)(不包含日期就保留)改成strstr(...)(包含日期才保留),这样就实现了只留指定日期行的需求。
  • 灵活指定目标日期:我把原来的$date改成了$targetDate,你可以直接写死要保留的日期(比如示例里的"2018-01-03"),如果还是需要用服务器当前日期,替换成$targetDate = date("Y-m-d");就行。

额外的小优化(可选):

如果想让代码更简洁健壮,可以用file_get_contents和file_put_contents简化文件操作,同时处理空行和末尾多余换行的问题:

$fname = "test.txt";
$targetDate = "2018-01-03";
$content = file_get_contents($fname);
$lines = explode(PHP_EOL, $content);
$out = "";

foreach ($lines as $line) {
    $trimmedLine = trim($line);
    // 跳过空行,同时判断是否包含目标日期
    if (!empty($trimmedLine) && strstr($trimmedLine, $targetDate)) {
        $out .= $line . PHP_EOL;
    }
}

// 去掉末尾多余的换行,再写入文件
file_put_contents($fname, rtrim($out));

这个版本能避免空行被误保留,也不会在文件末尾留下多余的空行,实用性更强。

内容的提问来源于stack exchange,提问作者First Last

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:36