php-массив для преобразования csv с заголовками столбцов

Я хочу преобразовать массив в csv, im, чтобы преобразовать ассоциативный массив в csv.

Но не в состоянии получить заголовки.

Я хочу, чтобы DUMBER DYPE DATE как динамические заголовки

Ниже представлен массив i, преобразованный.

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 ) ) 

Код приведен ниже. Но не может получить заголовки, но его значения приближаются.

 <? $fp1 = fopen('file.csv', 'w'); foreach ($arr2 as $fields) { fputcsv($fp1, $fields); } fclose($fp1); ?> 

Просто используйте array_keys чтобы array_keys получить ключи и записать их в файл.

 fputcsv($han, array_keys($arr[0])); foreach ($arr as $a) { ... } 

Это предполагает, что у вас есть числовой массив (и он предполагает, что он не пуст). Если arr[0] не гарантированно установлен, вы можете использовать array_shift или array_slice для извлечения первого элемента. (Или у вас может быть только флаг в вашем цикле того, уже написан ли заголовок – просто по умолчанию его значение равно false. Если это неверно, установите его значение true и напечатайте заголовок.)


Пока я нахожусь, вы можете использовать array_combine для перехода в противоположном направлении (CSV к массиву ассоциативных массивов).

 $data = array(); $header = fgetcsv($han); while (($row = fgetcsv($han)) !== false) { $data[] = array_combine($header, $row); } 

(Обратите внимание, что это предполагает, что у вас нет пустых строк – пустая строка будет возвращать array() который выдает предупреждение в комбайне и помещает нечувствительность в data .)

Ответ DarrenK является читабельным, но неполным. Так что для ноэфитов.

  $pathToGenerate = 'array.csv'; // your path and file name $header=null; $createFile = fopen($pathToGenerate,"w+"); foreach ($array as $row) { if(!$header) { fputcsv($createFile,array_keys($row)); fputcsv($createFile, $row); // do the first row of data too $header = true; } else { fputcsv($createFile, $row); } } fclose($createFile) 

Это хорошо сработало для меня. Null $ header не будет пустым, если вы назначите ключи, после чего строки будут следовать.

 $header=null; $createFile = fopen($pathToGenerate,"w+"); foreach ($assocArray as $row) { if(!$header){ fputcsv($createFile,array_keys($row)); }else{ fputcsv($createFile, $row); } } fclose($createFile); 

не так короток, как указано выше, но я считаю это вполне читаемым.