我想将数据保存到csv文件。
我已经可以这样做但我也希望添加类似的列名,以便报告更具可读性,但这是我在努力的地方:
到目前为止我的代码:
<?php
namespace Test\UserBundle\ReportsBuilder;
class RegistrationReport {
public function buildRegReport($data)
{
$cavPath = '../src/Test/UserBundle/Resources/reports/test_report_'.date('Y-m-d H:i:s').'.csv';
$csvh = fopen($cavPath, 'w+');
$row = 'rowid'.",".'emailaddress'.",".'firstname'.",".'surname'.",".'contact_number';
foreach ($data as $value)
{
$reportRows = array
(
$value['rowid'],
$value['emailaddress'],
$value['firstname'],
$value['surname'],
$value['contact_number'],
);
fputcsv($csvh, $reportRows);
}
fclose($csvh);
}
}
因此传递给方法的$ data param包含数组数组。我正在考虑创建一个带有列名的字符串,然后是一些如何将它添加到循环中,但是我可能错误地提出了如何将colum名称分配给我的报告的任何建议。
此致
答案 0 :(得分:2)
好吧,我真的不明白为什么你在数组循环中创建一个数组,包括相同的字段..
但是要回答您的问题,将列名放入CSV文件实际上非常简单。您唯一需要做的就是在第一行添加列名(逗号分隔)。这与添加数据行完全相同。
示例:
fputcsv($csvh, array_keys($data[0]));
foreach ($data as $value) {
fputcsv($csvh, $value);
}
希望这能回答你的问题。
答案 1 :(得分:1)
要在csv中添加标题,您可以使用与添加数据相同的方法。
所以你必须改变这一行
$row = 'rowid'.",".'emailaddress'.",".'firstname'.",".'surname'.",".'contact_number';
要:
fputcsv($csvh, array('rowid', 'emailaddress', 'firstname', 'surname', 'contact_number'));
答案 2 :(得分:0)
尝试:
<?php
namespace Test\UserBundle\ReportsBuilder;
class RegistrationReport {
public function buildRegReport($data)
{
$cavPath = '../src/Test/UserBundle/Resources/reports/test_report_'.date('Y-m-d H:i:s').'.csv';
$csvh = fopen($cavPath, 'w+');
$row = array('rowid','emailaddress','firstname','surname','contact_number');
fputcsv($csvh, $row);
foreach ($data as $value)
{
$reportRows = array
(
$value['rowid'],
$value['emailaddress'],
$value['firstname'],
$value['surname'],
$value['contact_number'],
);
fputcsv($csvh, $reportRows);
}
fclose($csvh);
}
}
答案 3 :(得分:0)
您需要在csv文件中添加listen,例如:
fputcsv($csvh, $row); before the foreach()