2016-02-29 54 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

相關問題