通过 fputcsv 以 CSV 格式订购数据库数据

Order Database Data in a CSV via fputcsv

我想以 CSV 格式从我的数据库获取数据。我的问题是数据没有排序。在我的 CSV 中只有一行数据。

我希望每一天都有自己的专栏,每小时都有自己的行。

像这样:

-|1|2|3|4|5|6| *DAYS*
0|_|_|_|_|_|_|
1|_|_|_|_|_|_|
2|_|_|_|_|_|_|
3|_|_|_|_|_|_|
4|_|_|_|_|_|_|
5|_|_|_|_|_|_|

我的代码是这样的:

$handle = fopen($filename, 'w');
fputcsv($handle, ['customer_id', 'count', 'year', 'month', 'day', 'hour']);

foreach ($table as $row) {
    fputcsv($handle, [$row['customer_id'], $row['count'], $row['year'], $row['month'], $row['day'], $row['hour']]);
}

我已经修改了你的代码。我添加了一个预处理步骤,它创建了一个包含索引 $hour 和 $day ($ymd) 的查找 table。我希望它有效,我没有测试它。无论如何它应该给你一个想法。

$days = array();
$hours= array();
$ymds = array();
foreach ($table as $row) {
    if(strlen($row['month'])<2) $row['month'] = "0{$row['month']}";
    if(strlen($row['day'])<2) $row['day'] = "0{$row['day']}";
    $ymd = "{$row['year']}-{$row['month']}-{$row['day']}";
    $hour = $row['hour'];
    $count = $row['count'];
    if(!isset($ymds[$hour]) $ymds[$hour] = array() ;
    if(!isset($ymds[$hour][$ymd]) $ymds[$hour][$ymd] = 0;
    $ymds[$hour][$ymd] += $count;
    $days[$ymd]= $ymd;
    $hours[$hour]= $hour;
}
unset($row);

$handle = fopen($filename, 'w');
fputcsv($handle, $days);

foreach ($hours as $hour) {
    $row = array();
    foreach ($days as $ymd) {
        $column = isset($ymds[$hour][$ymd]) ? $ymds[$hour][$ymd] : 0;
        $row[] = $column;
    }
    fputcsv($handle, $row);
}

您的代码应该如下所示。

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

$header = array('customer_id', 'count', 'year', 'month', 'day', 'hour');
fputcsv($fp, $header);
foreach ($table as $row) {
    fputcsv($fp, $row);
}