【问题标题】:PHP fgetcsv() search and overwrite filePHP fgetcsv() 搜索并覆盖文件
【发布时间】:2012-03-29 05:05:40
【问题描述】:

我有一个带有“代码”和“描述”的 .csv 文件。我想搜索 .csv,如果找到重复的“代码”,请替换整行。

即。 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 语句合并以覆盖代码?

【问题讨论】:

  • 它是“PHP”,而不是“PhP”或“Php”,当然从不“pHp”。

标签: php search overwrite fgetcsv


【解决方案1】:

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

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

开头:

$res = "";

也代替

for ($c=0; $c < $num; $c++) {
    if ($data[$c] = "STA-102") {
        $data[$c] = "OK Product"; }
    }
    echo $data[$c];

我想你想要

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

fclose($handle); 之后

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

【讨论】:

  • 这只会让它回显。如何使用fwrite 替换该位置的 csv 文件中的内容?
  • 谢谢,但我无法让它工作。我已经更新了上面的问题,以合并我当前写入文件的方式。
猜你喜欢
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2019-02-26
相关资源
最近更新 更多