我正在尝试准备每小时运行一次并检索一些数据库数据的代码。我想将其存储为csv文件,并使用它来创建高级图表。 问题:我无法创建根据此模型每小时更新的csv文件:
01:00, 02:00, 03:00
dataA-01, dataA-02, dataA-03
dataB-01, dataB-02, dataB-03
所以下一栏' 00:00'行数据A-04和dataB-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()从+更改为其他选项吗? 你能给我一个提示吗?
答案 0 :(得分:1)
在我看来,从逻辑的角度来看,我会在每一行中使用你现在拥有的输出:dd-mm;数据,数据......在X轴上有时间是合乎逻辑的吗? 这也意味着你可以使用追加模式。
如果你真的想保留所需的输出,那么我会在每行创建一个数组:
$arr[0][] = '21:00';
$arr[1][] = 'data_b';
$arr[0][] = 'data_b';
$new_data = '';
foreach($arr as $row)
{
$new_data .= implode(',', $row);
}
请注意,在最后一种情况下,您不能轻易使用附加模式,这可能导致需要从数据库中检索更多数据......
答案 1 :(得分:1)
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中的新数据在其上写入。
:)享受