Я хочу преобразовать массив в 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);
не так короток, как указано выше, но я считаю это вполне читаемым.