PHP仅在csv的一列中替换数据 [英] PHP replace data only in one column of csv
本文介绍了PHP仅在csv的一列中替换数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只需要替换csv中第三列中的值即可.而且没有别的地方. 我的csv的第3列仅包含"J"或"N",我需要将其更改为"5"或"0".但是现在我改变了,在整个文件中总是找到所有N和J#.但是我只需要在第三栏中进行更新.
I need to replace the values only from the third column in my csv. And no where else. Column 3 of my csv contains only a 'J' or a'N' and i need to change them to '5' or '0'. But right now i it changes always all found N's and J#s in the whole file. But i need it only updated in the third column.
我使用以下代码打开并重写我的csv.但是它总是将找到的所有字母写为5或0.
I use the following code to open and rewrite my csv. But it writes always all found Letters to 5 or 0.
$csvfile = 'csvfile.csv';
if (file_exists($csvfile)) {
unlink($csvfile);
echo "Alte $csvfile entfernt!";
} else {
echo "Keine alte $csvfile vorhanden";
}
$row = 0;
$fp = fopen('csvfile.csv', 'w');
if (($handle = fopen("oldCSV.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 200000, ",")) !== FALSE) {
$num = count($data);
$dataold = ['J', 'N'];
$datanew = ['5', '0'];
echo "<p> $num Felder in Zeile $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
fputs($fp, str_replace($dataold, $datanew, $data[$c] . "\n"));
}
}
}
fclose($fp);
推荐答案
while ($data = fgetcsv($handle)) {
$data[2] = str_replace(['J', 'N'], ['5', '0'], $data[2]);
fputcsv($fp, $data);
echo "<p> ".count($data)." Felder in Zeile ".$row++.": <br /></p>\n";
}
编辑
- 我从
while
中删除了!== FALSE
部分,每次都不将结果与false进行比较,最终fgetcsv()
本身将返回false并停止循环 - 折叠了
str_replace
及其参数数组(仅出于可读性) - 删除了
for
循环以仅更改第3个([2]
)列 - 摆脱
$num
变量
- I removed
!== FALSE
part fromwhile
to not compare result with false each time, finallyfgetcsv()
will return false itself and stop the loop - collapsed
str_replace
and its' arguments-arrays (for readability only) - removed
for
loop to change only 3rd ([2]
) coloumn - got rid of
$num
variable
这篇关于PHP仅在csv的一列中替换数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文