Convert array to CSV
The following functions will allow you to easily convert arrays to CSV formatted strings or CSV files.
One of the methods converts a CSV file to array that could be associative with the right function parameters.
function arrayToCsv(array $array, string $csv_file, string $separator = ',', string $enclosure = '"')
{
$fp = fopen($csv_file, 'w');
foreach ($array as $key => $row) {
if (is_array($row)) {
fputcsv($fp, $row, $separator, $enclosure);
} else {
fputcsv($fp, [$key, $row], $separator, $enclosure);
}
}
fclose($fp);
}
function arrayToCsvString(array $array, string $separator = ',', string $enclosure = '"')
{
$fh = fopen('php://temp', 'rw');
foreach ($array as $key => $row) {
if (is_array($row)) {
fputcsv($fh, $row, $separator, $enclosure);
} else {
fputcsv($fh, [$key, $row], $separator, $enclosure);
}
}
rewind($fh);
$csv = stream_get_contents($fh);
fclose($fh);
return $csv;
}
function csvToArray(string $csvFile, bool $headAsKeys = false, bool $columnAsKey = false, bool $skipEmptyLines = true)
{
$array = [];
$fp = fopen($csvFile, 'r');
if ($headAsKeys) {
$header = fgetcsv($fp);
}
while (($row = fgetcsv($fp)) !== false) {
if ($skipEmptyLines && !implode('', $row)) {
continue;
}
if ($headAsKeys) {
$array[] = array_combine($header, $row);
} elseif ($columnAsKey) {
$key = $row[0];
$array[$key] = count($row) > 2 ? $row : $row[1];
} else {
$array[] = $row;
}
}
fclose($fp);
return $array;
}