<?php
-# This file generates what Excell refers to as "CSV" files. This format makes
-# little sense, and does not actually have anything to do with commas.
+# These functions redutrn a csv download which is hopefully easy to import into
+# Excell and LibreOffice Calc
# pass in a 2d array (array of rows) and it'll send it to the browser
+# I can't figure out how to get multi-line fields to work, so this replaces newlines with 4 spaces.
function array2d_to_csv_download($data, $filename) {
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename=' . $filename);
foreach($data as $row) {
+ $first = true;
foreach($row as $el) {
- echo '"' . str_replace('"', '""', $el) . "\"\t";
+ if($first) {
+ $first = false;
+ } else {
+ echo ",";
+ }
+ echo '"' . str_replace("\n", " ", str_replace('"', '""', $el)) . '"';
}
- echo "\n"; # apparently can be \n or \r\n
+ echo "\r\n";
}
exit();
}
+
+# pass an array of associative arrays. keys from the first one will be used
+# see arary2d_to_csv_download above for more details
+function assocs_to_csv_download($data, $filename) {
+ if(count($data) < 1) {
+ $flats = array();
+ } else {
+ $flats = array(array_keys($data[0]));
+ $keys =& $flats[0];
+ foreach($data as $row) {
+ $flat = array();
+ foreach($keys as $k) {
+ $flat[] = $row[$k];
+ }
+ $flats[] = $flat;
+ }
+ }
+ array2d_to_csv_download($flats, $filename);
+}