2013-02-06 60 views
0

所以我有兩個文件,格式如下:解析兩個文件,並比較字符串

第一個文件

adam 20 male 
ben 21 male 

第二個文件

adam blonde 
adam white 
ben blonde 

我想這樣做,是在第一個文件中使用adam的實例,並在第二個文件中搜索並打印出屬性。

數據由標籤「\ t」分隔,所以這是我到目前爲止。

$firstFile = fopen("file1", "rb"); //opens first file 
$i=0; 
$k=0; 
while (!feof($firstFile)) { //feof = while not end of file 

$firstFileRow = fgets($firstFile); //fgets gets line 
$parts = explode("\t", $firstFileRow); //splits line into 3 strings using tab delimiter 

$secondFile= fopen("file2", "rb");       
     $countRow = count($secondFile);     //count rows in second file  
     while ($i<= $countRow){  //while the file still has rows to search      
      $row = fgets($firstFile); //gets whole row         
      $parts2 = explode("\t", $row);    
      if ($parts[0] ==$parts2[0]){      
      print $parts[0]. " has " . $parts2[1]. "<br>" ; //prints out the 3 parts 
      $i++; 
      } 
     } 


} 

我無法通過第二個文件找出如何循環,讓每一行,並比較的第一個文件。

+0

如果您的第一個文件不是很大,我會建議將第一個文件讀入緩存,然後將第二個文件的內容合併爲一個可能是多維數組。 – Passerby

回答

0

你在內循環中有一個錯字,你正在閱讀firstfile,應該讀第二個文件。另外,退出內循環後,您需要將指針重新指向開頭。

+0

感謝您的幫助。沒有注意到這一點。我添加了$ firstFileRow []而不是$ firstFileRow,這幫助我找到了一個解決方案。新的網站,所以我應該用soloution編輯我的問題? –

+0

如果您很高興我的答案能夠解決您的問題,請勾選以使其看起來應答。謝謝 –

0

如何:

function file2array($filename) { 
    $file = file($filename); 
    $result = array(); 
    foreach ($file as $line) { 
     $attributes = explode("\t", $line); 
     foreach (array_slice($attributes, 1) as $attribute) 
      $result[$attributes[0]][] = $attribute; 
    } 
    return $result; 
} 

$a1 = file2array("file1"); 
$a2 = file2array("file2"); 
print_r(array_merge_recursive($a1, $a2)); 

它將輸出繼電器如下:

Array (
    [adam] => Array (
     [0] => 20 
     [1] => male 
     [2] => blonde 
     [3] => white 
    ) 
    [ben] => Array (
     [0] => 21 
     [1] => male 
     [2] => blonde 
    ) 
) 

然而,這一個在一塊讀文件和會崩潰,如果他們是大(> 100MB)。另一方面,90%的PHP程序都有這個問題,因爲file()很受歡迎:-)