我想将数组转换为csv,我能够将关联数组转换为csv。
但无法获得标题。
我想将NUMBER TYPE DATE动态标题为
下面是我转换的数组。
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);
?>
答案 0 :(得分:18)
只需使用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
。)
答案 1 :(得分:9)
$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)
答案 2 :(得分:0)
罗伯特·克拉克的回答非常接近,但仍需要简化:不需要else
条款:
$pathToGenerate='array.csv'; // your path and file name
$header=FALSE;
$createFile=fopen($pathToGenerate,'w+');
foreach ($array as $row)
{ if (!$header)
{ fputcsv($createFile,array_keys($row));
$header=TRUE;
}
fputcsv($createFile,$row); // write the data for all rows
}
fclose($createFile);
答案 3 :(得分:-1)
这对我很有用 分配键后,null $ header将不为null,然后行将跟随。
$header=null;
$createFile = fopen($pathToGenerate,"w+");
foreach ($assocArray as $row) {
if(!$header){
fputcsv($createFile,array_keys($row));
}else{
fputcsv($createFile, $row);
}
}
fclose($createFile);
不像上面那么短,但我觉得它很可读。