2016-02-29 31 views
0

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

最终结果应该是什么样子? –

+0

file3必须是结果=) – owndbymeg

+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); 

?> 
+0

非常感谢你! – owndbymeg

相关问题