Php 编辑整个列的CSV字段值

Php 编辑整个列的CSV字段值,php,csv,fgetcsv,fputcsv,Php,Csv,Fgetcsv,Fputcsv,我有一个CSV,每天晚上从批发商那里下载,有更新的价格 我需要做的是编辑价格列(第二列),并将当前值乘以1.3(30%) 下面是我读取提供的CSV并只获取所需列的代码,但是我似乎不知道如何编辑价格列 <?php // open the csv file in write mode $fp = fopen('var/import/tb_prices.csv', 'w'); // read csv file if (($handle = fopen("var/import/Cbl_4036_

我有一个CSV,每天晚上从批发商那里下载,有更新的价格

我需要做的是编辑价格列(第二列),并将当前值乘以1.3(30%)

下面是我读取提供的CSV并只获取所需列的代码,但是我似乎不知道如何编辑价格列

<?php
// open the csv file in write mode
$fp = fopen('var/import/tb_prices.csv', 'w');

// read csv file
if (($handle = fopen("var/import/Cbl_4036_2408.csv", "r")) !== FALSE) {
$targetColumns = array(1, 2, 3); // get data from the 1st, 4th and 15th column

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {   
    $targetData = array();                  // array that hold target data
    foreach($targetColumns as $column){  // loop throught the targeted columns array
        if($column[2]){
            $data[$column] = $data[0] * 1.3;
        }
        $targetData[] = $data[$column]; // get the data from the column

    }
    # Populate the multidimensional array.
    $csvarray[$nn] = $targetData;       // add target data to csvarray
    // write csv file
    fputcsv($fp, $targetData);       
}
fclose($handle);
fclose($fp);

echo "CSV File Written Successfully!";
}


?>


请有人给我指出正确的方向,解释一下你是如何计算出这个函数的,这样我就可以同时学习了

您将价格列乘以-$data[0]*1.3。 这可能是错误的


其他意见:

如果您在处理此数据(csv)的生命周期中只执行一次,请尝试仅使用mysql本身来解决此问题。创建与数据库类似的表,将.csv数据导入该mysql表。然后,SQL可以按照您的需要进行操作

无环;无需编码,无需文件读/写,并可精确控制更新操作。您只需要知道分隔符(行分隔符,例如。\r\n、列分隔符(例如逗号、制表符或分号),以及是否使用双引号/单引号进行数据编码)

修改数据后,可以再次将其导出回csv


如果要处理.csv文件本身,请在一个连接(只读模式)中打开它,然后写入另一个文件-保存原始数据。

您说包含价格的列是第二列,但随后将该索引与零一起使用。不管怎么说,整件事都会容易些

$handle = fopen("test.csv", "r");
if ( $handle !== FALSE) {
    $out = "";
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $data[1] = ((float)$data[1] * 1.3);
        $out .= implode(";",$data) . "\n";
    }
    fclose($handle);
    file_put_contents("test2.csv", $out);
}
此代码打开一个以逗号作为分隔符的csv文件。 然后读取每一行,并将每一行的第二个冒号(索引1)乘以1.3

这条线

$out .= implode(";",$data) . "\n";
为新的csb文件生成一行。请参阅Officele文档中的内爆


在我关闭与文件的连接之后。和“当你可以一次性编写第二个文件时,连接两个文件是无用的”。对于小文件来说这是正确的

您能从CSV文件中添加一些示例数据吗?