Как заполнить ось 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:
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
.
У меня была та же проблема с массивом 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)
},