Home
PHP
Tech Tube
MySQL
Linux
CSS&HTML
JavaScript

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;
}