PHP Удалить текстовую строку, а затем удалить строку работает, НО, если удаление является последней строкой, это не удалит пустую строку - PullRequest
0 голосов
/ 29 февраля 2020

Используйте код ниже, чтобы удалить строку из текстового файла. Если удаленный элемент НЕ последний элемент, он работает нормально. Полностью удаляет строку.

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

НО, если удаленный элемент является элементом LAST, он удалит строку, а затем оставит пустую строку.

Открыть для более эффективных методов удаления всего объекта. строка из текстового файла.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Используйте 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);
1 голос
/ 29 февраля 2020

Последняя строка вашего файла не заканчивается новой строкой. Это плохая практика на Unix, так как многие инструменты обработки текста ожидают, что каждая строка заканчивается новой строкой, даже последней строкой. Но если это то, что вы хотите, вам нужно удалить символ новой строки в конце последнего элемента $panel_out перед записью в файл.

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