How to Export Data Array to a CSV File using PHP
Posted in: PHP

How to Export Data to CSV File using PHP

In this tutorial, you will learn how to export PHP array data to a CSV file, a process that can be integral to automated accounting systems. The data to export can be from any data source like a database table. The steps are as follows:

Let’s say we have an array of data in PHP, this data can be from any data source like a database table. For example, we have two fields of employees: name and salary. This can be an associative array.

$data = array(
    array('Jane', 2500),
    array('Paul', 2000),
    array('Jake', 3000),
    array('Tim', 3500),
);

Now, we will define the file name as ’employees.csv’ and delimiter as a comma.

$filename = 'employees' . '.csv';
$delimiter = ',';

Next, open the file pointer with write mode (‘w’). ‘php://memory’ represents that we are opening the file in php memory.

$f = fopen('php://memory', 'w');

The first row in the CSV file contains the heading columns (name and salary).

$headings = array('name', 'salary');

Next, we use fputcsv to write these heading columns to the file. Here, we also specify the delimiter (comma);

fputcsv($f, $headings, $delimiter);

Similarly, we can loop through all the data array and write to the same file.

foreach($data as $row) {
    fputcsv($f, $row, $delimiter);
}

Now, we will set the position of the file pointer using fseek. The fseek() function moves the file pointer from its current position to a new position, forward or backward specified by the number of bytes.

fseek($f, 0);

Next, we will set the response headers to export the CSV file.

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');

Now, output all remaining data on a file pointer.

fpassthru($f);

Lastly, close the file pointer and exit.

fclose($f);
exit();

The code for exporting the CSV file is as follows:

<?php
$data = array(
    array('Jane', 2500),
    array('Paul', 2000),
    array('Jake', 3000),
    array('Tim', 3500),
);

$filename = 'employees' . '.csv';
$delimiter = ',';

$f = fopen('php://memory', 'w');

$headings = array('name', 'salary');

fputcsv($f, $headings, $delimiter);

foreach($data as $row) {
    fputcsv($f, $row, $delimiter);
}

fseek($f, 0);

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');

fpassthru($f);

fclose($f);
exit();

If you don’t know how to import a CSV file, you can follow this tutorial: How to Import Data from CSV File using PHP

Back to Top
Privacy First

We respect your privacy. No ad cookies. No tracking. Only essential site functions.

Learn more about the Privacy Policy