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

