[英]Return the next line of a csv file each time a php script is called
我正在使用highcharts創建具有動態更新數據的“實時”圖表。 它調用一個php文件,該文件應該解析CSV並將結果輸出為json。
我的Highcharts / jQuery代碼是這樣的:
function requestData() {
$.ajax({
url: 'datatest.php',
success: function(point) {
var series = chart.series[0],
shift = series.data.length > 20; // shift if the series is longer than 20
// add the point
chart.series[0].addPoint(eval(point), true, shift);
// call it again after one second
setTimeout(requestData, 10000);
},
cache: false
});
}
我的datatest.php文件因此是:
<?php
header("Content-type: text/json");
$handle = fopen("WindSpeed.csv", "r");
$windVals = fgetcsv($handle, 1000, ",");
$x = time() * 1000;
$y = $windVals[0];
// Create a PHP array and echo it as JSON
$ret = array($x, $y);
echo json_encode($ret);
?>
但是,我不知道每次調用php腳本時如何傳遞csv的下一行。 它不斷將相同的json值(在csv的第一行中)傳遞給highcharts,因此它僅顯示一條平坦的直線。
我對此非常陌生,但是是否有一種方法可以在每次調用PHP腳本時解析CSV文件的下一行? 還是有更好的替代方法?
謝謝,
問候,凱夫
我對JavaScript不太滿意,並且不完全記得您發布內容的范圍規則,因此這里是PHP。 這樣的事情應該可以通過將行存儲在會話中並在每次調用腳本時增加它來起作用。 這使用file()
將所有行讀入數組:
session_start();
$_SESSION['line'] = isset($_SESSION['line']) ? ++$_SESSION['line'] : 0;
$lines = file('WindSpeed.csv');
if(isset($lines[$_SESSION['line']])) {
$windVals = str_getcsv($lines[$_SESSION['line']], ',');
} else {
$_SESSION['line'] = 0;
}
header("Content-type: text/json");
$x = time() * 1000;
$y = $windVals[0];
$ret = array($x, $y);
echo json_encode($ret);
如果文件很大,則可能要使用fgetcsv()
遍歷文件,直到到達正確的行為止。 就像是:
session_start();
$_SESSION['line'] = isset($_SESSION['line']) ? ++$_SESSION['line'] : 0;
$handle = fopen('WindSpeed.csv', 'r');
$i = 0;
while(($windVals = fgetcsv($handle, 1000, ',')) && $i <= $_SESSION['line']) {
$i++;
}
if(!$windVals) {
$_SESSION['line'] = 0;
}
header("Content-type: text/json");
$x = time() * 1000;
$y = $windVals[0];
$ret = array($x, $y);
echo json_encode($ret);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.