Мне нужно запустить запрос, который будет возвращать несколько строк и экспортировать его в CSV. Однако я должен поставить ячейки в определенном порядке.
Поэтому давайте скажем, что в моей таблице указаны id, имя, адрес, жена. Мне нужно создать csv в порядке id, address, wife, name. Я решил, что могу просто сделать массив в правильном порядке, а затем сделать csv с этим, но через час с поиском googling я не могу узнать, как сделать 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); }
Я пробовал это, но ошибка говорит, что вспомогательный файл загрузки ожидал строку, а не массив.
Вот какой код я использую … вы можете настроить столбцы, которые вам нужны в экспорте …
Примечание. Этот CSV напрямую отправляется на php://output
который записывается непосредственно в выходной буфер. Это означает, что вы не сохраняете никаких CSV-файлов на сервере и можете обрабатывать гораздо больший размер файла, который создает гигантский массив, а затем пытается его пропустить.
header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=\"Jobs_".date('Mjy', $from)."-".date('Mjy', $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, поэтому я не могу помочь вам на этом фронте.
Эти короткие скрипты создают 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 для CSV – Скачать
<?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); ?>