簡體   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