2012-02-23 48 views
2

我有兩個文件。如何通過使用php比較兩個文件來查找額外的行?

第一個有482行。 第二個只有519行。

我想通過使用php比較兩個文件來尋找額外的行。

比方說我的第一個文件有這樣

Mango 
Orange 
Cherry 
Apple 
Blackberry 

線,可以說,我的第二個文件看起來像這樣

Apple 
Orange 
Mango 
Banana 
Cherry 
Blackberry 

請注意:的線是按隨機順序。現在我想用一個php腳本來刪除相同的行並保留額外的行。例如文件1包含行Mango。文件2也以隨機順序包含該行。所以我想刪除該行。

回答

1

我把JYelton提出的同樣的方法。

演示在這裏:http://codepad.org/lCa68G76

<? 

$file1 = array(
    'Mango', 
    'Orange', 
    'Cherry', 
    'Apple', 
    'Blackberry' 
); 

$file2 = array(
    'Apple', 
    'Orange', 
    'Mango', 
    'Banana', 
    'Cherry', 
    'Blackberry' 
); 


foreach($file2 as $line) 
{ 
    if (!in_array($line, $file1)) 
    { 
     $output[] = $line; 
    } 
} 

var_dump($output); 


?> 
+0

謝謝非常 – user1091558 2012-02-23 17:01:34

0

通過在每個文件的行中讀入一個列表來製作兩個列表,然後比較它們。瀏覽list1並刪除list2中找不到的每個項目,反之亦然。

+0

你好亞歷克斯,我是一個PHP初學者。這就是爲什麼我問這個問題。所以,如果你給我一些示例代碼,我會非常感激。謝謝 – user1091558 2012-02-23 16:56:06

4

將每個文件加載到一個字符串數組中(例如使用file_get_contents)。

執行一些循環,對於數組2中的每個項目,確定項目是否存在於數組1中。如果是,請從數組2中移除項目並繼續。

完成後,數組2將只包含唯一的行。

編輯:

如果你只是想刪除文件2是也存在於文件1行,你要尋找的唯一值(其中順序並不重要)。一個快速的方法是使用array_diff函數。

下面是一個例子:

$file1 = array('Mango', 'Orange', 'Cherry', 'Apple', 'Blackberry'); 
$file2 = array('Apple', 'Orange', 'Mango', 'Banana', 'Cherry', 'Blackberry'); 

$diff = array_diff($file2, $file1); 

var_dump($diff); 

// Output 
array 
    3 => string 'Banana' (length=6) 

如果你喜歡做手工這就像我在第一部分中提到的使用循環,這裏是你會怎麼做:

// Loop over every value in file2 
for($i = count($file2) - 1; $i >= 0; $i--) 
{ 
    // Compare to every value in file1; if same, unset (remove) it 
    foreach($file1 as $v) 
     if ($v == $file2[$i]) 
     { 
      unset($file2[$i]); 
      break; 
     } 
} 
// Reindex the array to remove gaps 
$output = array_values($file2); 
var_dump($output); 

// Output 
array 
    0 => string 'Banana' (length=6) 
0
<?php 

$testOne = 'Apple Orange Carrot Banana'; 
$testTwo = 'Apple Orange Carrot'; 

$tTwo = explode(' ', $testTwo); 
$tOne = explode(' ', $testOne); 

foreach($tOne as $first) { 
    foreach($tTwo as $second) { 
     if ($second == $first) { 
      echo 'Both arrays contain: ' . $second . '</br>'; 
     }  
    } 
} 

?> 

檢查兩個數組是否都包含值。

0

這是否需要用PHP腳本完成?您可以在bash實現這一點很容易:

cat file1 file2 | sort | uniq > uniques.txt 
0
// read in both files 
$file1 = file($filename1); 
$file2 = file($filename2); 

// calculate the entries that are in both files 
$inBothFiles = array_intersect($file1, $file2); 

// filter elements found in both files from file2 
$newFile2 = array_diff($file2, $inBothFiles);