我需要运行一个返回多行并将其导出为CSV的查询。我必须按照一定的顺序放置细胞。
所以我要说我的桌子上有id,姓名,地址,妻子。我需要按照id,address,wife,name的顺序构建一个csv。我想我可以按照正确的顺序制作一个数组,然后用它制作一个csv但是经过一个小时的谷歌搜索我无法找到如何用数组制作一个csv。
有fputcsv但需要预先制作的csv。此外,我希望有一个codeigniter方式来做到这一点。
public function export() {
$this->load->helper('download');
$data[1] = 'i like pie';
$data[2] = 'i like cake';
force_download('result.csv', $data);
}
我尝试了但是错误说下载帮助文件期望字符串不是数组。
答案 0 :(得分:16)
以下是我使用的一些代码......您可以在导出中调整所需的列...
注意:此CSV直接发送到php://output
,直接写入输出缓冲区。这意味着你没有在服务器上保存任何.csv文件,它可以处理更大的文件大小,构建一个巨大的数组,然后尝试循环它。
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=\"Jobs_".date('M.j.y', $from)."-".date('M.j.y', $to).".csv\"");
header("Pragma: no-cache");
header("Expires: 0");
$handle = fopen('php://output', 'w');
fputcsv($handle, array(
'JobId',
'Template',
'Customer',
'Status',
'Error',
'PDF',
'Run Time',
'Wait Time',
'Server'
));
foreach ($jobs as $jobData) {
fputcsv($handle, array(
$job->getId(),
$job->getTemplate(),
$jobData['customers_firstname'].' '.$jobData['customers_lastname'],
$status,
$error,
$jobData['products_pdfupload'],
$job->getRunTime(),
$job->getWaitTime(),
$jobData['server']
));
}
fclose($handle);
exit;
这可以让您精确了解CSV导出的工作原理。我没有使用CodeIgniter的文件下载助手,所以我无法帮助你。
答案 1 :(得分:4)
这个简短的脚本构建了CSV,并允许您下载它:
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
/** open raw memory as file, no need for temp files */
$temp_memory = fopen('php://memory', 'w');
/** loop through array */
foreach ($input_array as $line) {
/** default php csv handler **/
fputcsv($temp_memory, $line, $delimiter);
}
/** rewrind the "file" with the csv lines **/
fseek($temp_memory, 0);
/** modify header to be downloadable csv file **/
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
/** Send file to browser for download */
fpassthru($temp_memory);
}
/** Array to convert to csv */
$array_to_csv = Array(Array(12566, 'Enmanuel', 'Corvo'), Array(56544, 'John', 'Doe'), Array(78550, 'Mark', 'Smith'));
convert_to_csv($array_to_csv, 'report.csv', ',');
您可以在此处阅读完整的帖子:
答案 2 :(得分:2)
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>