[英]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.