我正试图准备每小时运行一次并检索一些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中的新数据。
:)享受