使用下面的代码从文本文件中删除一行。如果删除的项目不是最后一个元素,它工作正常。完全删除该行。 $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); }但是如果删除的项目是最后一个元素,它将删除该行,然后留下一个空行。打开从文本文件中删除整行的更好方法。
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
使用 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);
隔江千里
TA贡献1906条经验 获得超10个赞
文件的最后一行不以换行符结尾。这在 Unix 上是不好的做法,因为许多文本处理工具都希望每一行都以换行符结尾,即使是最后一行。$panel_out但如果这是您想要的,您需要在写入文件之前删除最后一个元素末尾的换行符。
$last = count($panel_out)-1;
if ($last >= 0) {
$panel_out[$last] = rtrim($panel_out[$last]);
}
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消