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


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

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

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

所以下一列'04:00',行data -04和database -04将在凌晨4点添加。

我得到了什么:

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中的新数据。

:)享受