PHP 删除 txt 行,然后删除行有效,但如果删除的是最后一行,则不会删除空行

PHP Delete txt line and then remove line works BUT if the delete is the last line, it won't remove blank line

使用下面的代码从文本文件中删除一行。如果删除的项目不是最后一个元素,它工作正常。完全删除该行。

    $panel_dir = 'host.txt';
    $panel_data = file($panel_dir);
    $panel_out = array();
    foreach($panel_data as $panel_line) {
        if(trim($panel_line) != $panel_del) {
            $panel_out[] = $panel_line;
        }
    }

    $f_panel = fopen($panel_dir, "w+") or die("Error");
    foreach($panel_out as $panel_line) {
        fwrite($f_panel, $panel_line);
    }
    fclose($f_panel);  
}

但是如果删除的项目是最后一个元素,它会删除该行,然后留下一个空行。

打开从文本文件中删除整行的更好方法。

您文件的最后一行没有以换行符结尾。这在 Unix 上是不好的做法,因为许多文本处理工具期望每一行都以换行符结尾,即使是最后一行。但如果那是你想要的,你需要在写入文件之前删除 $panel_out 最后一个元素末尾的换行符。

$last = count($panel_out)-1;
if ($last >= 0) {
    $panel_out[$last] = rtrim($panel_out[$last]);
}

使用array_map到trim所有行。使用 unset 从数组中删除匹配项。您不需要使用 $panel_out 变量。然后用implode将数组转为换行分隔的字符串。

$panel_dir = 'host.txt';
$panel_data = array_map('trim', file($panel_dir));

foreach($panel_data as $key => $panel_line) {
    if($panel_line == $panel_del) {
        unset($panel_data[$key]);
    }
}

$f_panel = fopen($panel_dir, "w+") or die("Error");
fwrite($f_panel, implode("\n", $panel_data));
fclose($f_panel);