I want to convert array to csv ,im able to convert the associative array to csv.
But not able to get the headers.
I want the NUMBER TYPE DATE as headers dynamically
Below is the array i converrted .
Array
(
[0] => Array
(
[NUMBER] => 67
[TYPE] => Other
[DATE] => 3/31/2011
)
[1] => Array
(
[NUMBER] => 87
[TYPE] => something
[DATE] => 3/28/2011
)
[2] => Array
(
[NUMBER] => 67
[TYPE] => Other
[DATE] => 3/2/2011
)
)
The code is given below .But not able to get the headers but its values are coming.
<?
$fp1 = fopen('file.csv', 'w');
foreach ($arr2 as $fields)
{
fputcsv($fp1, $fields);
}
fclose($fp1);
?>
Just use
array_keys
to get the keys and write them to the file first.This assumes that you have a numeric array though (and it assumes that it's not empty). If
arr[0]
is not guaranteed to be set, you can usearray_shift
orarray_slice
to extract the first element. (Or you could just have a flag in your loop of whether or not the header is already written -- just have it default to false. If it's not true, set it to true and print the header.)While I'm at it, you can use
array_combine
to go the opposite direction (CSV to array of associative arrays).(Note that this assumes you have no blank rows -- a blank row would return
array()
which will issue a warning with the combine and put non-sense intodata
.)Robert Clark's answer is very close, but still needs simplification: There's no need for the
else
clause:This worked nicely for me null $header will not be null once you assign the keys then the rows will follow.
not as short as above but I find it quite readable.
DarrenK 's answer is readable but incomplete. So for the noephytes.