我試圖從CSV中提取多家公司的財務股票數據,並在Highcharts/Highstocks折線圖中將數據顯示爲單獨的系列。我有源代碼設置,我可以將數據+轉換爲JSON,但我無法將數據傳遞給Highcharts。我相信我沒有使用最有效的方法來準備Highcharts使用的數據,我希望有人能夠給我指示我所做的不正確。請看看我的代碼,並讓我意識到您看到的任何低效或明顯的錯誤。將數據傳遞給Highcharts時遇到問題
PHP代碼:
date_default_timezone_set('America/Los_Angeles');
$stocks = array('MSFT' => 'http://ichart.finance.yahoo.com/table.csv?s=MSFT', 'AAPL' => 'http://ichart.finance.yahoo.com/table.csv?s=AAPL', 'FB' => 'http://ichart.finance.yahoo.com/table.csv?s=FB');
$stocks_data = array();
foreach ($stocks as $key=>$stock) {
$fh = fopen($stock, 'r');
$header = fgetcsv($fh);
$varname = $key . '_data';
$$varname = array();
while ($line = fgetcsv($fh)) {
${$varname}[count($$varname)] = array_combine($header, $line);
}
fclose($fh);
}
foreach($MSFT_data as $val){
$MSFT[] = strtotime($val['Date']) * 1000 . ', ' . (float)$val['Close']; //sets the date as a javascript timestamp
}
$MSFT = json_encode($MSFT);
foreach($AAPL_data as $val){
$AAPL[] = strtotime($val['Date']) * 1000 . ', ' . (float)$val['Close']; //sets the date as a javascript timestamp
}
$AAPL = json_encode($AAPL);
foreach($FB_data as $val){
$FB[] = strtotime($val['Date']) * 1000 . ', ' . (float)$val['Close']; //sets the date as a javascript timestamp
}
$FB = json_encode($FB);
JS代碼:
$(function() {
var seriesOptions = [],
yAxisOptions = [],
colors = Highcharts.getOptions().colors;
seriesOptions[0] = {
name: 'MSFT',
data: <? php echo $MSFT; ?>
};
seriesOptions[1] = {
name: 'AAPL',
data: <? php echo $AAPL; ?>
};
seriesOptions[2] = {
name: 'FB',
data: <? php echo $FB; ?>
};
function createChart() {
chart = new Highcharts.StockChart({
chart: {
renderTo: 'container'
},
rangeSelector: {
selected: 4
},
yAxis: {
labels: {
formatter: function() {
return (this.value > 0 ? '+' : '') + this.value + '%';
}
},
plotLines: [{
value: 0,
width: 2,
color: 'silver'
}]
},
plotOptions: {
series: {
compare: 'percent'
}
},
tooltip: {
pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
valueDecimals: 2
},
series: seriesOptions
});
}
});
如果您有任何問題或需要進一步的信息,請讓我知道了評論。
感謝
BTW:我已經包括了所有必要的資產Highcharts工作;當我用來自Highcharts網站的示例代碼替換我的JS + PHP時,它的效果非常好。所以這個問題顯然在於我的JS + PHP代碼。
你在你的seriesOptions代碼中有關於MSFT,AAPL和FB的報價?相當有信心這會爲未定義的變量拋出錯誤。 – MatthewKremer 2013-03-08 22:45:24
@MthetheKKermer謝謝,只是做了這個改變。仍然沒有工作,但是,這是我的錯誤。 – 585connor 2013-03-08 22:54:44
嗯......我試着複製你的代碼並把它放入JSFiddle(只是用靜態數組替換PHP echo),它工作正常。你可以運行代碼,並在PHP完成並把它放在這裏後查看頁面的HTML源代碼? – MatthewKremer 2013-03-08 23:01:49