4

I have an array. When I am using print_r($output). I am getting the array like this

array(
    [0] => Array
            (
                [listing_id] => 14
                [category_id] => Modern Australian
                [listing_name] => Boatshed Restaurant
                [image_name] => krish_logo.png
                [address] => 2, Thrower Drive
                [phone] => 07 5534 3888
                [introduction_text] => 
                [website] => 
                [payment_types] => 
                [open_days] => 
                [licenced] => 0
                [highchair] => 0
                [dress_code] => 

            )
    [1] => Array
            (
                [listing_id] => 13
                [category_id] => Indian,Restaurant,Take-away
                [listing_name] => Krish Indian Cuisine - Varsity Lakes
                [image_name] => krish_logo.png
                [address] => Shop B/228 Varsity Parade, The Piazza Varsity Lakes
                [phone] => 07 5578 8090
                [introduction_text] => <p>Welcome to Krish Indian Cuisine. An award winning north indian  restaurant which offers the very best in modern and indian-fusion  cuisine. If you prefer your food tantalizingly hot or subtly mild, Krish  Indian has something for you. Bring the whole family or maybe just an  intimate dinner for two. Whatever the reason you will enjoy the fabulous  food</p>
                [website] => http://www.testsite.com/
                [payment_types] => Cash,Visa,Mastercard,Eftpos
                [open_days] => TuesLunch,n,MonLunch,n,MonDinner,n,TuesBKfast,n,WedLunch,n,ThuDinner,n,ThuLunch,n,TuesDinner,n,WedDinner,n,FriDinner,n,FriLunch,n,SunDinner,n,SatLunch,n,SatDinner,n,SunLunch,n
                [licenced] => 0
                [highchair] => 1
                [dress_code] => Casual



            )
    [2] => Array
            (
                [listing_id] => 12
                [category_id] => Steak
                [listing_name] => Outback Jacks Bar & Grill - Southport
                [image_name] => 9_1552272162010moomoo.jpg
                [address] => 2, Barney Street
                [phone] => 07 5532 3271
                [introduction_text] => 
                [website] => 
                [payment_types] => 
                [open_days] => 
                [licenced] => 0
                [highchair] => 0
                [dress_code] => 

            )                

)

I want to export this to a csv file. So for that I made my code like this

$fichier = 'file.csv';
 header( "Content-Type: text/csv;charset=utf-8" );
 header( "Content-Disposition: attachment;filename=\"$fichier\"" );
 header("Pragma: no-cache");
 header("Expires: 0");

 $fp= fopen('php://output', 'w');

 foreach ($output as $fields) 
 {
    fputcsv($fp, $fields);
 }
 fclose($fp);
 exit();

But here I am getting the file but when I am opening the file it is showing only array(). So can someone tell me how to get the data in csv? Any help and suggestions will be really appreciable. Thanks

NewUser
  • 12,713
  • 39
  • 142
  • 236
  • $output variable may be double dimentional array. please print the $output variable. – selvan Jun 02 '15 at 08:05
  • I suggest to use xml instead of csv. It's impossible to keep the correct structure of nested arrays in csv. – umka Jun 02 '15 at 08:06
  • Not everything can be `csv`ed. What about the nesting levels? – Hanky Panky Jun 02 '15 at 08:09
  • is it possible the values of `$output` change between the `print_r` and the `fputcsv()` ? Your modified version looks fine to me, but maybe if you show us the code that generates `$output` it might shed some light on it... – komodosp Jun 02 '15 at 15:13

2 Answers2

2

Your array isn't really CSV friendly as it is multi-dimensional.

To put into CSV, you need to convert each element of $output to a one-dimensional array:

foreach ($output as $fields) {

   $csvrec = array(
        'listing_id' => $fields['listing_id'],
        'category_id' => $fields['category_id'], 
   // etc... etc...
   // down to...
        'parking' => $fields['dinning_details']['parking'],
        'byo_info' => $fields['dinning_details']['byo_info'],
        'indoor' => $fields['dinning_details']['capacity']['indoor'],
   // etc.. etc...
   );

   fputcsv($fp, $csvrec);
}
komodosp
  • 3,316
  • 2
  • 30
  • 59
0

When passing a nested array to fputcsv, the inner array will show up as 'Array'. You should first flatten your array or format it in a way that corresponds to your desired CSV format.

Martijn
  • 5,491
  • 4
  • 33
  • 41