2012-03-28 66 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