我正在使用PHP生成CSV可下载文件。我有一个问题,当我在MS Excell或Ubuntu Libre Office中打开文件时,结果不像预期的那样。
我想要这个输出,但我不能强迫从新行开始。
Name Slope Length Size(Inches) Max Length Location
Name1 5 150 12" 500 location1
Name2 8 350 12" 400 location 2
Name3 16 326 12" 400 location3
这是我的PHP代码
$csv_data[] = $_POST['name'][$i];
$csv_data[] = $_POST['slope'][$i];
$csv_data[] = $_POST['length'][$i];
$csv_data[] = $size;
$csv_data[] = $max_length;
$csv_data[] = $_POST['location'][$i].PHP_EOLE;
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array("Name", "Slope", "Length", "Size", "Max Length", "Location"));
fputcsv($output, $csv_data);
但是这段代码输出如下:
Name Slope Length Size Max Slope Length Location
Name1 5 150 12" 500 location1 Name2 8 350 12" 400 location 2 Name3 16 326 12" 400 location3
答案 0 :(得分:1)
执行以下操作:
$csv_headers = array(array("Name", "Slope", "Length", "Size", "Max Length", "Location"));
$csv_full_data = array_merge($csv_headers, $csv_data);
var_dump($csv_full_data);
fputcsv($output, $csv_full_data);
告诉我们输出。
答案 1 :(得分:1)
我所做的是将$csv_data
数组设为二维而不是一,然后使用foreach
循环。它有点慢,但为我工作。
这是更新后的代码
$csv_data[$i][] = $_POST['name'][$i];
$csv_data[$i][] = $_POST['slope'][$i];
$csv_data[$i][] = $_POST['length'][$i];
$csv_data[$i][] = $size;
$csv_data[$i][] = $max_length;
$csv_data[$i][] = $_POST['location'][$i];
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array("Name", "Slope", "Length", "Size", "Max Length", "Location"));
foreach ($csv_data as $value) {
fputcsv($output, $value);
}
这是我需要的输出。
Name Slope Length Size Max Length Location
Name1 5 150 12" 500 location1
Name2 8 350 12" 400 location12
Name3 16 326 12" 400 location3
Name4 36 127 12" 400 location4
答案 2 :(得分:0)
PHP_EOL的值是什么使它成为“\ r \ n”并尝试
$csv_data[] = $_POST['location'][$i].PHP_EOL; change to
$csv_data[] = $_POST['location'][$i]."\r\n";