Чтение из одного и запись в другой CSV-файл - PHP - PullRequest
0 голосов
/ 20 мая 2019

У меня есть CSV-файл:

test2.csv

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

Я открываю этот файл в PHP, проверяю некоторые условия, если цена больше или меньше, сохраняю новую цену изатем я хочу поместить его в новый CSV-файл с php.

Это мой код:

$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 голосов
/ 20 мая 2019

Проблема в том, что вы перезаписываете выходной файл и записываете каждый элемент входного файла, как если бы это была строка в файле. Эта версия открывает выходной файл в начале, а затем просто добавляет каждую строку при обработке ...

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...