[英]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.