从一个文件读取并写入另一个csv文件-PHP

时间:2019-05-20 18:30:11

标签: php excel csv

我有CSV文件:

test2.csv

ID  Name    Price
Q4  Quail   400
Q2  Quail   500
Q1  Quail   100

我用PHP打开此文件,检查条件,如果价格更大或更小,保存新价格,然后我想用php将其放入新的CSV文件中。

这是我的代码:

$file = fopen('test2.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
   if (array_key_exists($line[0], $result)) {
        $oldPrice= 500;
        $oldPriceplus20= $oldPrice +($oldPrice*0.2);
        $oldPriceminus20= $oldPrice -($oldPrice*0.2);
        $newPrice = $line[2];
        print( "The 'first' element is in the array\nOld price is: ".$oldPrice."\nNew price is:".$newPrice."\n");
        print("Old price with +20% is:".$oldPriceplus20."\nOld price with -20% is:".$oldPriceminus20."\n");     
        if ($newPrice <= $oldPriceplus20 && $newPrice >= $oldPriceminus20){
            echo"Take new price\n\n";
        }
        else{
            $line[2] = $oldPrice;
            echo"Take the old price.\n";

        }

    }
    $fp = fopen('write.csv', 'w');
    foreach ($line as $lin) {
        fputcsv($fp, array($lin), ',', ' ');
    }
    fclose($fp);
}
fclose($file);

但这是我得到的输出:

Q1
Quail
100

我在哪里弄错了?我的新CSV文件应该与test2.csv几乎相同,只是如果需要的话要加上新的价格。

1 个答案:

答案 0 :(得分:0)

问题是您要覆盖输出文件并写入输入文件的每个元素,就像它是文件中的一行一样。此版本从头开始打开输出文件,然后在处理它时仅添加每一行...

$file = fopen('test2.csv', 'r');
$fp = fopen('write.csv', 'w');
while (($line = fgetcsv($file)) !== FALSE) {
    if (array_key_exists($line[0], $result)) {
        $oldPrice= 500;
        $oldPriceplus20= $oldPrice +($oldPrice*0.2);
        $oldPriceminus20= $oldPrice -($oldPrice*0.2);
        $newPrice = $line[2];
        print( "The 'first' element is in the array\nOld price is: ".$oldPrice."\nNew price is:".$newPrice."\n");
        print("Old price with +20% is:".$oldPriceplus20."\nOld price with -20% is:".$oldPriceminus20."\n");
        if ($newPrice <= $oldPriceplus20 && $newPrice >= $oldPriceminus20){
            echo"Take new price\n\n";
        }
        else{
            $line[2] = $oldPrice;
            echo"Take the old price.\n";

        }

    }
    fputcsv($fp, $line, ',', ' ');
}
fclose($file);
fclose($fp);