我正在尝试创建CSV导出而不将文件实际保存到服务器(因此可以直接在用户浏览器中打开)。
这是我的代码。它打开Excel文件很好,但文件中只有一行(即字段行)。下方没有显示任何行。
我是否正确地循环了我的对象数组?
$fh = fopen('php://output', 'w');
// Start output buffering (to capture stream contents)
ob_start();
fputcsv($fh, $fields);
// Loop over the * to export
if(!empty($results)) {
foreach($results as $row) {
fputcsv($fh, $row->week_ending);
fputcsv($fh, $row->project);
fputcsv($fh, $row->plots);
fputcsv($fh, $row->categories);
fputcsv($fh, $row->employee);
}
}
// Get the contents of the output buffer
$string = ob_get_clean();
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$filename");
exit($string);
结果:
Week ending Project name Plot numbers Categories Employee
修改
以下是对象的内容:
Array
(
[0] => stdClass Object
(
[week_ending] => Sunday 10 May 2015
[project] => Manor Road
[plots] => 1B, 2B, 3B
[categories] => 1" Imp Gas, 1"Imp Gas (middle flats)
[employee] => Your Name
)
)
答案 0 :(得分:2)
fputcsv将第一个参数作为文件句柄,你有正确的。第二个参数应该是一个字段数组。所以在不知情的情况下,您应该能够做到:
foreach($results as $row) {
fputcsv($fh, $row);
}
答案 1 :(得分:2)
与Matt的回答一样,fputcsv
期望数组作为第二个参数。看到你的每个$row
都是一个对象,我们可以将它强制转换为一个数组:
<?php
// ...rest of the code... //
foreach($results as $row) {
fputcsv($fh, (array) $row);
}
这会将$row
对象转换为key => value
对只是对象属性的数组。