如果文本数据和变量数据之间有条件,则删除行
我有一个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
号码,我只想删除除了包含一个单词的行之外的所有行。
答案 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的任何行。好处是它不使用两个数组作为中间结构。