如何使用PHP数组中的字符串格式数据填充Highcharts轴

时间:2011-10-22 00:47:25

标签: php javascript highcharts

我正在尝试将php数组项转换为 Highcharts X轴的标签。默认示例是:

categories: ['Jan','Feb','Mar','Apr', 'May', 'Jun', 
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

所以我有一个PHP数组($ items)并最终得到一个Javascript数组(var items)。 Firebug输出以下内容:

console.log(items);
["item1_10_20", "item2_2011_10_14", "item3_2011_10_07", "item3_2011_09_12"]

我可以看到我应该有单引号。我怎样才能做到这一点?或者也许我应该用逗号和单引号分隔字符串来代替Highcharts?我该怎么办?


修改

我试过这个,但一点都没有运气!

在我的视图文件中,我有一个javascript脚本:

var items = "'<? echo join("','", $items) ?>'"; // Note the enclosing single quotes

在Highcharts JS文件中:

xAxis: {
 categories: [items]
},

整个数组放在x轴的第一个值中,其余值都是空白。 item变量显示在firebug中:

'item1_2011_10_20','item2_2011_10_14','item3_2011_10_07','item4_2x1_2011_09_12'

这有多奇怪?


修改

当使用json_encode格式化php数组时,我仍然无法获得高图来识别数组。如果我用单引号手动复制和硬编码数组,它可以工作。但我真的需要通过变量将数组从php传递给highcharts的js。

这是通过json_encode生成的带有数组的x轴: Chart with bad x-axis

2 个答案:

答案 0 :(得分:5)

以下是数组 -

["item1_10_20", "item2_2011_10_14", "item3_2011_10_07", "item3_2011_09_12"]

所以,改变以下

xAxis: {
    categories: [items]
},

如下 -

xAxis: {
    categories: items
},

<强>更新

xAxis: {
    categories: eval('(' + items + ')')
},

<强> UPDATE2:

你需要知道的一件事是JSON不是Javascript。你从服务器获得JSON响应,这只不过是Javascript中的一个字符串。因此,要在Javascript中使用该JSON响应,您必须解析JSON以形成类似于对象,数组等的Javascript数据结构(就像我们使用XMl一样),这称为解析。

有很多JSON解析库,但我们也可以使用eval JS函数来完成工作,只要安全性不是问题。

在您的情况下,JSON响应表示一个数组,因此您使用eval将其转换为真正的Javascript数组。

因此,items是JSON,您使用evaleval('(' + items + ')'))进行解析,返回Javascript数组,然后将结果分配给categories

答案 1 :(得分:1)

我对c#数组有同样的问题,我用razor解决这个问题:

@{
    string[] myIntArray = new string[5] {"Apples", "Oranges", "Pears", "Grapes", "Bananas" };
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    var jsVariable = serializer.Serialize(myIntArray);  
}


xAxis: {
    categories: @Html.Raw(jsVariable)
 },