2016-04-18 42 views
0

我需要比較兩個csv文件。我每天都會購買新產品,第二款產品包含所有庫存產品。 我有工具,如果他們在兩個文件中通過比較sku是相同的產品。帶有新產品的首款csv可能會有幾次相同的sku。因此,如果有匹配比我需要將第二個csv中的Prod.ID添加到新列中第一個csv中的sku。在PHP比較2 csv中,如果匹配並且寫入新的csv,則從1 csv添加數據

這是第一個CSV的樣子:

ID  SKU   Cat   Price 
0  12345678 Clothes  10.00 
0  12345678 Clothes  10.00 
0  87654321 Bath  5.00 

第二個文件lookes這樣

ID  SKU   Cat   Price 
321 12345678 Clothes  10.00 
532 87654321 Bath  5.00 

,所以我需要從第二CSV將ID添加到所有匹配的SKU在首先csv並將其保存爲verry new csv以便最終得到ist看起來像這樣:

ID  SKU   Cat   Price 
321  12345678 Clothes  10.00 
321  12345678 Clothes  10.00 
532  87654321 Bath  5.00 

現在我有以下代碼,但我只得到一個空的updated.csv。我堅持完全以:(

$fp = fopen('updated.csv', 'w'); 

$csvFile1 = "firts-file.csv"; 
$handle1 = fopen($csvFile1, "r"); 

$csvFile2 = "second-file.csv"; 
$handle2 = fopen($csvFile2, "r"); 

while(($data1 = fgetcsv($handle, 20000, ";")) && ($data2 = fgetcsv($handle2, 20000, ";"))) { 
    $oldID = $data1[0]; 
    $newID = $data2[0];  
    if(($data1[1]) == ($data2[1])) { 

     fputs($fp, str_replace($oldID, $newID, "\n")); 
    } 
} 
+0

你描述你的2個輸入文件的方式,**他們不是.csv文件**所以,因爲我們不明白你實際上問這個問題,你的其他問題沒有得到答案。 ** C **表示逗號** S **表示分隔** V **表示變量您的文件描述包含NOT COMMAS – RiggsFolly

+0

如果您可以再次嘗試正確描述INPUTS和您想要的內容以及格式的輸出,你實際上可能會有人試圖回答 – RiggsFolly

+0

輸入是csv。如果我在OOo或Excel中打開它們,我會得到如上所述的Coulumns。 我需要的是檢查兩個文件,如果有一些相同的SKU,並且如果是這樣,比文件1中的ID'0'用文件中的ID替換爲每個匹配並將改變的數據保存到新的csv。 – Kallmas

回答

1

1.csv - $導致

ID  SKU   Cat   Price 
0  12345678 Clothes  10.00 
0  12345678 Clothes  10.00 
0  87654321 Bath  5.00 

2.csv - $源

ID  SKU   Cat   Price 
321 12345678 Clothes  10.00 
532 87654321 Bath  5.00 

代碼

<?php 
    $csvHandleOne = fopen('1.csv', "r"); 
    $source = $result = array(); 
    while($data = fgetcsv($csvHandleOne, 2048, ";")) { 
     $result[] = $data; 
    } 
    fclose($csvHandleOne); 

    $csvHandleTwo = fopen('2.csv', "r"); 
    while($data = fgetcsv($csvHandleTwo, 2048, ";")) { 
     //We are interested only in SKU and ID link 
     $source[$data[1]] = $data[0]; 
    } 
    fclose($csvHandleTwo); 

    $csvHandleResult = fopen('result.csv', "w"); 
    foreach ($result as $key => $value) { 
     if($key && isset($source[$value[1]])) { 
      //SKU => ID link found in source. Set id to $result 
      $value[0] = $source[$value[1]]; 
     } 
     fputcsv($csvHandleResult, $value, ';'); 
    } 
    fclose($csvHandleResult); 
+0

爲了讓回答對有問題的人和未來的訪問者有用,請確保包含一些你做過什麼的解釋,以及爲什麼這樣做。 – miken32

+0

謝謝。它工作完美。 對於令人困惑的帖子感到抱歉。我試圖編輯第一篇文章,但點擊編輯後,我總是從我的第二篇文章中得到內容。 再次。塔克你。 :) – Kallmas