繁体   English   中英

PHP和highcharts:将mysql结果添加为CSV文件中的新列

[英]PHP and highcharts: add mysql results as new column in CSV file

我正在尝试准备每小时运行一次的代码并检索一些数据库数据。 我想将其存储为csv文件,并使用它从highcharts创建图表。 问题:我无法创建根据以下模型每小时更新的csv文件:

01:00, 02:00, 03:00
dataA-01, dataA-02, dataA-03
dataB-01, dataB-02, dataB-03

因此,将在凌晨4点添加带有数据A-04和数据B-04行的下一列“ 04:00”。

我得到了:

class liveData 
{
    public $newCsvData = array();

    /*some sql here*/

    public function getHour() 
    {
        $hour = date('H:i');
        array_push($this->newCsvData, $hour);
    }

    public function getDataA() 
    {
        /*...*/
        array_push($this->newCsvData, $dataA);
    }

    public function getDataB() 
    {
        /*...*/
        array_push($this->newCsvData, $dataB);
    }

    public function saveCsv()
    {
        print_r($this->newCsvData);
        $fp = fopen('./tmp/test.csv', 'a+');
        fputcsv($fp, $this->newCsvData, ','); 
        fclose($fp);
    }

}

print_r($ this-> newCsvData)的结果是:

Array
(
    [0] => 21:00
    [1] => 12
    [2] => 40
)

该代码有效,但创建的test.csv当然看起来像这样:

21:00,12,40
21:01,15,45
21:03,18,62

我需要得到:

21:00,21:01,21:03
12,15,18
40,45,62

我的问题看似微不足道,但实际上-不幸的是-我已经花了数小时。 我只是无法想象正确的方法。 即使我能够得到类似的东西

21:00
12
40

这样,下一个小时的数据将添加到新行中。

21:00
12
40
21:01
15
45

我应该使用多维数组吗? 我应该将fopen()从a +更改为其他选项吗?
你能给我一个提示吗?

我认为,从逻辑角度看,我将每行使用此时的输出:dd-mm; data,data,...在X轴上显示时间是否合乎逻辑? 这也意味着您可以使用附加方式。

如果您真的想保留所需的输出,那么我将为每行创建一个数组,如下所示:

$arr[0][] = '21:00';
$arr[1][] = 'data_b';
$arr[0][] = 'data_b';

$new_data = '';
foreach($arr as $row)
{
   $new_data .= implode(',', $row);
}

请注意,在这种情况下您不能轻易使用附加模式,这可能导致需要从数据库检索更多数据...

print_r($ this-> newCsvData)应该看起来像这样:

$data = array(
    array( '21:00' ),
    array( '12' ),
    array( '40' ),
);

第二步,应该看起来像这样:

$data = array(
    array( '21:00', '21:01' ),
    array( '12', '15' ),
    array( '40', '40' ),
);

与第三步相同:

所以你可以做到这一点。 每次您从CSV文件导入所有数据并将每个单元格推送到相应的数组,如下所示

$newArray = array(array(), array(), array());
foreach($dataFromCSV as $data)
{
   array_push($newArray[0][], $data[0]);
   array_push($newArray[1][], $data[1]);
   array_push($newArray[2][], $data[2]);
}

然后将新的记录数据附加到$ newArray中。 从CSV文件中删除旧数据,并使用$ newArray中的新数据在其上写入。

:) 请享用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM