PHP - CSV Export Class
<?php
/**
* Creates a URI string containing CSV data which can be used in an HTML <a href=""> tag to export a CSV file
* to the client.
*
* @param array $data
* @param array|null $columnNames
*
* @return string
* @throws \App\Helpers\Exception
*/
public static function createURI(array $data, array $columnNames = null)
{
if (empty($data)) throw new Exception('provided array was empty');
ob_start();
$stream = fopen('php://output', 'w') or die ('Cannot open php://output');
if ($columnNames) fputcsv($stream, $columnNames);
foreach ($data as $row) fputcsv($stream, $row);
fclose($stream) or die('Cannot close php://output');
return rawurlencode(ob_get_clean());
}
public static function uri(array $data, array $columnNames = null)
{
if (empty($data)) throw new Exception('provided array was empty');
ob_start();
$stream = fopen('php://output', 'w') or die ('cannot open php://output');
// write header row
if ($columnNames) fputcsv($stream, $columnNames);
// write data rows
foreach ($data as $row) {
fputcsv($stream, $row);
}
fclose($stream) or die('cannot close php://output');
$output = ob_get_clean();
return rawurlencode($output);
}
<?php
namespace App\Helpers;
/**
* Class Export
* @package App\Helpers
*/
final class ExportCSV
{
/**
* Exports an array of data to a CSV file.
*
* @param array $data
* @param array|null $columnNames
*
* @return void
* @throws \App\Helpers\Exception
*/
public static function toFile(array $data, array $columnNames = null)
{
if (empty($data)) {
throw new Exception('provided array was empty');
}
// redirect output to client’s web browser
header('Content-Type: application/csv'); // can also be text/csv
header('Content-Disposition: attachment;filename=results-' . time() . '.csv');
// open the output stream
$file = fopen('php://output', 'w') or die ('Cannot open output buffer');
// write column names
if (null !== $columnNames) {
fputcsv($file, $columnNames);
}
// write data array
foreach ($data as $row) {
fputcsv($file, $row);
}
// release buffer
fclose($file) or die('Cannot close output buffer or file');
}
/**
* Creates a URI string containing CSV data which can be used in an HTML <a href=""> tag to export a CSV file
* to the client.
*
* @param array $data
* @param array|null $columnNames
*
* @return void
*/
public static function createURI(array $data, array $columnNames = null)
{
$uri = null;
// prepare column header
if (null !== $columnNames) {
$uri .= self::prepareCSVRow($columnNames);
}
// prepare column data
foreach ($data as $row) {
$uri .= self::prepareCSVRow($row);
}
return rawurlencode($uri);
}
/**
* Takes an array of data and returns a comma delimited string of data enclosed by double quotes.
*
* @param array $row
*
* @return string
*/
public static function prepareCSVRow(array $row)
{
return implode(',', array_map(function ($el) {
return chr(34) . $el . chr(34);
}, $row)) . PHP_EOL;
}
}