删除/替换文本文件中的数据

时间:2018-06-18 04:42:24

标签: php

如果文本数据和变量数据之间有条件,则删除行

实施例

我有一个txt数据,其中每个用户都有一个用户名,例如(一个二三一) 我想删除除“一个”用户名

之外的所有数据

我的代码;

if(file_get_contents('visitors.txt') != "one") {

    $GetLine = ;

    function removeLine ($url, $lineToRemove) 
    { 
        $data = file_get_contents($url); 
        $lines = explode(PHP_EOL, $data); 
        $lineNo = 1; 
        foreach($lines as $line) 
        { 
            $linesArray[$lineNo] = $line; 
            $lineNo++; 
        } 
        unset($linesArray[$lineToRemove]); 
        return implode("\n", $linesArray); 
    } 

    $data = removeLine ("username.txt", $getLine); 

    echo $data 
}

该函数用于删除行。

我的问题是如果使用data + $getLine号码,我只想删除除了包含一个单词的行之外的所有行。

2 个答案:

答案 0 :(得分:0)

请注意,您不应该在if语句中定义函数。

另外,除非我有误解,否则你甚至不需要行号。

function remove_line( $data, $remove ){
    $lines     = explode( PHP_EOL, $data ); // Convert to Array
    $new_lines = ''; // Start a new variable we'll add to in a loop

    foreach( $lines as $line ){
        $line = trim( $line ); // Trim Whitespace

        if( $line != $remove ){
            // Line isn't a line we want removed, so save it plus an EOL
            $new_lines .= $line.PHP_EOL;
        }
    }

    return $new_lines;
}

现在,如果您加载如下文件:$file = file_get_contents( 'my-file.txt' );,其中包含以下内容:

One
Two
One
Three
One

通过remove_line功能运行后,您最终会得到以下内容:

$file     = file_get_contents( 'my-file.txt' );
$new_file = remove_line( $file, 'One' );

var_dump( $new_file ); // Returns: string(10) "Two Three "

答案 1 :(得分:0)

可以使用正则表达式完成:

$file = preg_grep('#one#', file('file.txt'));

这将使$file数组仅包含包含字符串“one”的行。要将数组转换回字符串,只需implode

如果您只想回显包含“one”的行,您还可以使用iterators

$file = new RegexIterator(new SplFileObject("file.txt"), '#one#');
foreach ($file as $content) {
    echo $content, PHP_EOL;
}

这将逐行遍历文件并回显其中包含字符串1的任何行。好处是它不使用两个数组作为中间结构。