PHP删除txt行然后删除行但如果删除是最后一行,它不会删除空白行

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


    $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);  

}

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


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



慕码人8056858
浏览 219回答 2
2回答

噜噜哒

使用 array_map 修剪所有线条。使用 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);

隔江千里

文件的最后一行不以换行符结尾。这在 Unix 上是不好的做法,因为许多文本处理工具都希望每一行都以换行符结尾,即使是最后一行。$panel_out但如果这是您想要的,您需要在写入文件之前删除最后一个元素末尾的换行符。$last = count($panel_out)-1;if ($last >= 0) {    $panel_out[$last] = rtrim($panel_out[$last]);}
打开App,查看更多内容
随时随地看视频慕课网APP