簡體   English   中英

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

[英]How to change all values in a column of a csv file to a specific value php

我有一個看起來像這樣的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僅在csv的一列中替換數據,但它似乎不起作用。

任何幫助贊賞。 謝謝

解決問題的快速而骯臟的方法是:

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);
}

您可以使用preg_replace並立即替換所有值,而不是循環CSV文件的每一行。

只需兩行代碼即可。

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

其中$ path是路徑和CSV文件。

你可以在這里看到它: https//3v4l.org/Mc3Pm

要更改CSV的一個字段,只需分配給該數組元素,就不需要使用任何類型的替換函數。

$data[3] = "500";

fputcsv()是用來寫一行到CSV文件,而不是在一次整個文件。 你需要循環調用它。 您還需要返回文件的開頭並刪除舊內容。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM