这是我现在所拥有的。它会过滤.txt
文件中的一段文字。我的问题是$filter
必须在行的开头。我需要过滤器能够在线上的任何位置。
<?php
$input = file("PATH/TO/file1", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$filter = file("PATH/TO/file2", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$result = array_filter($input, function($line)use($filter){
if(in_array(substr($line, 0, strpos($line, " ")), $filter))
return TRUE;
return FALSE;
});
file_put_contents("PATH/TO/file3", implode(PHP_EOL, $result));
?>
以下是PATH/TO/file2
的示例文件:
info1
info2
以下是PATH/TO/file1
的示例文件:
1232131-72-427-Q john info1 johnson -----more data----------more data-----
More dataMore dataMore dataMore dataMore dataMore data
8765438-43-542-T peter dudeson -----more info3 data----- -----more data-----
More dataMore dataMore dataMore dataMore dataMore data
3456 info 6 761-21-742-G frank zena -----more data----------more data-----
More dataMore dataMore dataMore dataMore dataMore data
0924560-23-124-O marin franklin -----more info4 data----------more data-----
More dataMore dataMore dataMore dataMore dataMore data
2345333-21-423-P pin dudeson-----more data----------more info2 data-----
More dataMore dataMore dataMore dataMore dataMore data
5434225-21-983-A chow info5 ching -----more data----------more data-----
More dataMore dataMore dataMore dataMore dataMore data<br>
以下是PATH/TO/file3
的示例文件:
1232131-72-427-Q john info1 johnson -----more data----------more data-----
More dataMore dataMore dataMore dataMore dataMore data
2345333-21-423-P pin dudeson-----more data----------more info2 data-----
More dataMore dataMore dataMore dataMore dataMore data
结果必须是两行,但关键字不会在第二行。这有可能吗?
答案 0 :(得分:1)
<?php
$input = file("./file1", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$filter = file("./file2", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$new_line = "\n"; // \r\n
$result = "";
function pass_filter($line, $filter) {
$i = count($filter);
$res = false;
while (--$i > -1 ) {
if (strrpos($line, $filter[$i]) > 0) {
$res = true;
break;
}
}
return $res;
}
for ($j = 0; $j < count($input); $j++) {
if ( pass_filter($input[$j], $filter) ) {
$result .= $input[$j] . $new_line . $input[($j+1)] . $new_line;
}
$j++;
}
file_put_contents("./file3",$result);
?>