【问题标题】:Building CSV with array用数组构建 CSV
【发布时间】:2012-06-08 21:24:43
【问题描述】:

我需要运行一个查询,该查询将返回多行并将其导出为 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);  
}

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

【问题讨论】:

    标签: php arrays codeigniter csv download


    【解决方案1】:

    这是我使用的一些代码...您可以调整导出中所需的列...

    注意:此 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 的文件下载助手,所以在这方面我帮不了你。

    【讨论】:

      【解决方案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);
      ?>
      

      【讨论】:

        【解决方案3】:

        这个简短的脚本构建 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 Array to CSV - Download

        【讨论】:

          猜你喜欢
          • 2018-11-10
          • 1970-01-01
          • 2016-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-09
          相关资源
          最近更新 更多