Convertire un array in csv con PHP

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Una semplice funzione per convertire un array in formato csv, inviando al browser un file oppure direttamente il testo del csv.

La funzione accetta più parametri per personalizzare l'output.

/**
 * Converte un array in formato csv.
 * 
 * @param array $array_data Dati in formato array.
 * @param string $delimiter Delimitatore di campo (virgola, punto e virgola, ...)
 * @param bool $get_file Indica se restituire al browser un file o una stringa.
 * @param string $filename Nome del file.
 */
function array_to_csv($array_data = array(), $delimiter = ';', $get_file = TRUE, $filename = 'export.csv')
{
 // apertura nuovo file in memoria
 $csv = fopen('php://memory', 'w');
 // preparazione del file csv, inserendo un array per riga
 foreach ($array_data as $csv_line) {
  fputcsv($csv, $csv_line, $delimiter);
 }
 // reset del puntatore del file
 fseek($csv, 0);

 //se viene richiesto l'output in formato file
 if ($get_file == 1) {
  // header per invio file
  header('Content-Type: application/csv');
  header('Content-Disposition: attachement; filename="' . $filename . '";');
  // lettura del file temporaneo e scrittura nell'output buffer (invio al browser)
  fpassthru($csv);
  exit;
 } else {
  // se viene richiesto l'output in formato stringa
  $output = stream_get_contents($csv);
  echo $output;
 }

 exit;
}

Per utilizzare la funzione:

$test_data = array(
 1 => array(
  'Mario','Verdi'
 ),
 2 => array(
  'Giovanni','Bianchi'
 ),
 3 => array(
  'Marco','Rossi'
 ),
);

array_to_csv($test_data, ';', TRUE, 'nome_custom.csv');

 

Condividi questo post


Commenti