如何使用php从黑名单文件.txt中删除行

时间:2017-11-04 10:54:18

标签: php

我有一个包含此数据的文本文件:

 keyword 1
 keyword 2
 keyword 3
 keyword 4
 keyword 4

但是,我需要删除txt文件中包含'keyword 1, keyword 2..'的所有行,并保留特定的数据行。

知道如何打开和写入文件以及关闭文件,但我不知道如何使用php删除行/内容。如何使用php从文件中删除不需要的行?

3 个答案:

答案 0 :(得分:0)

下面这个脚本应该有帮助

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

干杯

答案 1 :(得分:0)

如果您需要删除确切的行,and your file use your system-native newlines:

$blacklist = array (
        'keyword 1',
        'keyword 2' 
);
file_put_contents ( 'file.txt', implode ( PHP_EOL, array_diff ( file ( 'file.txt', FILE_IGNORE_NEW_LINES ), $blacklist ) ) );

但如果您,正如您所说,需要找到包含而不是精确行的行,或者您的文本文件不使用系统原生换行符,则会变得更复杂:

$blacklist = array (
        'keyword 1',
        'keyword 2' 
);
$lines = file ( 'file.txt' );
foreach ( $lines as $key => $line ) {
    foreach ( $blacklist as $black ) {
        if (false !== strpos ( $line, $black )) {
            unset ( $lines [$key] );
            break;
        }
    }
}
file_put_contents ( 'file.txt', $lines );

答案 2 :(得分:-1)

您可以使用php函数file(...)来读取文件(所有行都作为数组)。并使用in_array来确定给定的行是否匹配您的关键字之一(我假设整行必须匹配关键字)。函数trim()用于从输入行中删除'\ n'。

 $linesToRemove = array('keyword 1', 'keyword 2', 'keyword 3');
 $lines = file('file.txt');
 foreach($lines as $key => $line)
 {
     if (in_array(trim($line), $linesToRemove))
         unset($lines[$key]);
 }
 file_put_contents('file2.txt', implode("", $lines));