6

我需要运行一个将返回多行并将其导出到 CSV 的查询。不过,我必须按一定的顺序放置单元格。

因此,可以说我的表的布局是 ID、姓名、地址、妻子。我需要按照id、地址、妻子、姓名的顺序构建一个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);  
}

我试过了,但错误说下载帮助文件需要一个字符串而不是数组。

4

3 回答 3

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 的文件下载助手,所以在这方面我无法为您提供帮助。

于 2012-06-04T20:10:24.413 回答
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', ',');

你可以在这里阅读完整的帖子:

PHP 数组到 CSV - 下载

于 2014-09-02T20:38:36.833 回答
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);
?>
于 2012-06-04T20:15:33.173 回答