2012-03-28 67 views
1

我有一個帶有「code」和「description」的.csv文件。我想搜索.csv,如果它找到重複的「代碼」,請替換整行。PHP fgetcsv()搜索並覆蓋文件

即。 csv文件的:

code   description 
STA-101  A great product 
STA-102  Terrible Product 

如果它找到 「STA-102」 的東西取代描述,即:

code   description 
STA-101  A great product 
STA-102  OK Product 

這些都是動態的,所以我if語句需要一個。這可以使用fgetcsv()完成嗎?
以下不工作,但它的一切我知道現在:

$row = 1; 
if (($handle = fopen("formTest.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      if ($data[$c] = "STA-102") { 
      $data[$c] = "OK Product"; } 
      echo $data[$c] . "<br />\n"; 
     } 

    } 
    fclose($handle); 
} 

爲了寫信給我的文件,首先,我有:

$code = $_POST['CODE']; 
$description = $_POST['DESC']; 

if ($_POST) { 
    $csvData = $code . "," . $description. "\n"; 
    $fp = fopen("formTest.csv","ab"); 

    if($fp){ 
    fwrite($fp,$csvData); 
    fclose($fp); } 
} 

我怎麼可以將我上面用if語句覆蓋代碼是否需要?

+0

這是「PHP」,而不是「PhP」或「Php」,當然*從不*「pHp」。 – meagar 2012-03-28 17:11:28

回答

2

在你的例子中,分隔符是[tab](不是',')。

while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { 

在beggining地說:

$res = ""; 

代替

​​

而且我想你想

if ($data[0] == "STA-102") { 
    $data[1] = "OK Product"; 
} 
$res .= implode('\t', $data) . "\n"; 

後FCLOSE($處理);

$handle = fopen("formTest.csv", "w")); 
fwrite($handle, $res); 
fclose($handle); 
+0

這隻會讓它回聲。我怎樣才能用'fwrite'替換我在csv文件中的位置? – ToddN 2012-03-28 20:17:35

+0

我更新了我的答案。 – 2012-03-28 20:52:39

+0

謝謝,但我無法實現它的工作。我已經更新了上面的問題,以便將我目前正在寫入該文件的內容加入其中。 – ToddN 2012-03-28 21:06:10