Как заполнить ось Highcharts данными в строковом формате из массива PHP


Я пытаюсь преобразовать массив элементов php в метки для верхних диаграмм оси X. Пример по умолчанию:

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

Итак, у меня есть массив PHP ($items) и в итоге получается массив Javascript (элементы var). 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

И в файле JS Highcharts:

xAxis: {
 categories: [items]
},

Весь массив помещается в первое значение оси x, а остальные значения являются пустыми. Переменная элемента отображается в firebug:

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

Насколько странно, что это не работает?


РЕДАКТИРОВАТЬ

При использовании json_encode для форматирования массива php я все еще не могу получить высокие диаграммы для распознавания массива. Если я вручную скопирую и жестко закодирую массив с помощью одинарных кавычек, это сработает. Но мне действительно нужно передать массив из php в js highcharts через переменные.

Вот результирующая ось x с массивом через json_encode: Chart with bad x-axis

Author: Landitus, 2011-10-22

2 answers

Следующее уже является массивом -

["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 + ')')
},

Обновление 2:

Здесь вам нужно знать одну вещь: JSON - это не Javascript. Вы получаете ответ get JSON с сервера, который является не более чем строкой в Javascript. Итак, чтобы использовать этот ответ JSON в Javascript, вам нужно проанализировать JSON, чтобы сформировать структуру данных Javascript, подобную объекту, массив и т.д. (Так же, как мы делаем с XML), что называется синтаксическим анализом.

Существует множество библиотек синтаксического анализа JSON, но мы также можем использовать функцию eval JS для выполнения этой работы, если безопасность не вызывает беспокойства.

И в вашем случае ответ JSON представляет массив, поэтому вы используете eval, чтобы превратить его в настоящий массив Javascript.

Итак, items - это JSON, и вы используете eval (eval('(' + items + ')')) для анализа, который возвращает массив Javascript, а затем вы присваиваете результат categories.

 5
Author: Bhesh Gurung, 2011-10-25 21:43:18

У меня была та же проблема с массивом 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)
 },
 1
Author: Marco, 2014-06-09 14:53:01