如何在PHP中将输入数据添加到CSV文件?

时间:2019-01-29 11:10:59

标签: php forms csv input

我需要将数组中的表单输入数据添加到 PHP 中的 CSV 文件中。

我尝试使用 foreach 函数添加数据,但是该数据未显示在具有以下代码的 CSV 文件中:

$values = [
    'orderperson',
    'address',
    'postnumber',
    'city',
    'phone',
    'email'
];

$fh = fopen("file.csv", "w");
foreach($values as $info) {
    fputcsv($fh, $_POST[$info]);
}

如果我是对的,我要在此处完成的操作会将所有数据放在一行中?我如何在文件中添加数据,就像在一行中只有一个数组元素这样:

1个订购者
2个地址
3个邮编

不像1个订单处理员2个地址3个邮递号

2 个答案:

答案 0 :(得分:1)

fputcsv()分隔符必须为单个字符

$fh = fopen("file.csv", "w");
$delimiter = ',';
fputcsv($fh, $values, $delimiter);

或者,您可以尝试以下操作:

$values = [
'orderperson',
'address',
'postnumber',
'city',
'phone',
'email'
];

$path = 'file.csv';
$handle = fopen($path, 'w+');
foreach($values as $value) {
    fwrite($handle, $value . ',' . PHP_EOL);
}
fclose($handle);

稍后您可以修剪最后一个逗号或使用count()并避免为数组中的最后一个元素添加定界符。


另一方面,如果您不希望使用逗号,而是希望将新行作为分隔符(但是不再是CSV文件!),则可以用以下代码替换fwrite()行:

fwrite($handle, $value . PHP_EOL);

答案 1 :(得分:0)

好的。您似乎走在正确的道路上。如果您打算将$ values数组中的每个条目放在生成的.csv文件的新行中,请执行以下操作:

  1. 创建一个函数,以将$ data数组中设置的字段与传入的$ _POST数据合并
$postToCsv = function (array $fields, array $super) {
  return array_map(function ($field, $val) {
    return array($field, $val);
  }, $fields, $super);
};

  1. 修改循环以使用上面的代码段中的函数。
foreach ($postToCsv($values, $_POST) as $field) {
  fputcsv($fh, $field);
}

另外,请记住关闭文件操作。

fclose($fh);