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