如何将csv文件的列中的所有值更改为特定值php

时间:2018-07-16 20:37:50

标签: php csv

我有一个csv文件,看起来像这样(还有更多行):

Jim,jim@email.com,8882,456
Bob,bob@email.com,8882,343

我要做的是将第四列456,343中的所有值更改为500。

我是php的新手,不确定如何做到这一点。 我尝试过

<?php
$file = fopen('myfile.csv', 'r+');
$toBoot = array();
while ($data = fgetcsv($file)) {
    echo $data[3];
    $data[3] = str_replace($data[3],'500');
    array_push($toBoot, $data);


}
//print_r($toBoot);
echo $toBoot[0][3];
fputcsv($file, $toBoot);
fclose($file)

?>

但是可以打印

Jim,jim@email.com,8882,456
Bob,bob@email.com,8882,343
Array,Array

不是

 Jim,jim@email.com,8882,500
 Bob,bob@email.com,8882,500

我看过这篇文章,PHP replace data only in one column of csv,但它似乎不起作用。

任何帮助表示赞赏。谢谢

3 个答案:

答案 0 :(得分:1)

解决问题的一种快速而肮脏的方法是:

foreach (file("old_file.csv") as $line)
{
    $new_line = preg_replace('/^(.*),[\d]+/', "$1,500", $line);
    file_put_contents("new_file.csv", $new_line, FILE_APPEND);
}

答案 1 :(得分:1)

您可以使用preg_replace并立即替换所有值,而不必循环CSV文件的每一行。

只需要两行代码。

$csv = file_get_contents($path);
file_put_contents($path, preg_replace("/(.*),\d+/", "$1,500", $csv));

$ path是CSV文件的路径。

您可以在此处查看它的运行情况:https://3v4l.org/Mc3Pm

答案 2 :(得分:1)

要更改CSV的一个字段,只需将其分配给该数组元素,则无需使用任何种类的替换功能。

$data[3] = "500";

fputcsv()用于将一个行写入CSV文件,而不是一次写入整个文件。您需要循环调用它。您还需要返回文件的开头并删除旧内容。

fseek($file, 0);
ftruncate($file, 0);
foreach ($toBoot as $row) {
    fputcsv($file, $row);
}