trim函数对字符串数组不起作用



这真是一个奇怪的行为,我无法解释。我有一个CSV文件要格式化。我想要删除的行后面可能有','。

$lines = explode(PHP_EOL, $csv);
$csv = '';
foreach($lines as $line) {
$csv .= trim($line, ',') . PHP_EOL;
}

修剪不做任何事情,只是按原样返回行。只是为了确保我从csvtrim("a,b,c,d,,", ',');复制了一行,这很好。谁能告诉我为什么上面的代码不会工作?

如果CSV文件是在不同的操作系统上创建的,它可能使用与PHP_EOL不同的换行符。因此,除逗号外,请修剪所有换行字符。

foreach($lines as $line) {
$csv .= trim($line, ",rn") . PHP_EOL;
}

请勿手动编辑CSV文件。将其解析为数组,然后编辑该数组。然后可以将修改后的数组写回CSV文件。

可以使用fputcsv将数据写入文件,也可以使用str_putcsv(自定义函数)。

$newData = [];
$data = array_map('str_getcsv', $lines); // parse each line as a CSV
foreach ($data as $row) {
$row = array_filter($row); // remove blank values
// for some dumb reason, php has `str_getcsv` but not `str_putcsv`
// so let's use `str_putcsv` from: https://gist.github.com/johanmeiring/2894568
$newData[] = str_putcsv($row);
}
$newData = implode(PHP_EOL, $newData);

最新更新