使用单个单词使用其他文本文件过滤一个文本文件

时间:2016-02-29 15:53:07

标签: php

这是我现在所拥有的。它会过滤.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

结果必须是两行,但关键字不会在第二行。这有可能吗?

1 个答案:

答案 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);

?>