问题
I am generating a CSV downloadable file in PHP. I have a problem that when I open file in MS Excell or Ubuntu Libre Office the formate is not like what is expected.
I want this output but I can not force to start from new line.
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
This is my PHP code
$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);
But this code output like this:
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
回答1:
Do the following:
$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);
And tell us the output.
回答2:
What I did is I make the $csv_data
array two dimensional instead of one and then I use foreach
loop. Its a bit slow but working for me.
Here is the updated code
$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);
}
This is the output which I was need.
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
回答3:
what is the value of PHP_EOL make it "\r\n" and try
$csv_data[] = $_POST['location'][$i].PHP_EOL; change to
$csv_data[] = $_POST['location'][$i]."\r\n";
来源:https://stackoverflow.com/questions/14273801/force-new-line-in-csv-generated-file-in-php