Я использую график HighCharts Bar для построения данных из набора данных mysql в гистограмме.
Теперь результат моего запроса выглядит следующим образом:
Name Expense ----------------- July 700.0000 August 450.0000 September 1700.0000
Свойство series
HighCharts требует данных в нижнем формате для построения графика
[ {name:"July",data:[700.0000]}, {name:"August",data:[450.0000]}, {name:"September",data:[1700.0000]} ]
Поэтому я подумал о том, чтобы скрыть свой набор результатов в объект JSON, используя json_encode($row)
. Но я получил следующий результат:
[{"name":"July","data":"700.0000"}, {"name":"August","data":"450.0000"}, {"name":"September","data":"1700.0000"}]
Сомнения:
Также я могу использовать объект, созданный в блоке php, непосредственно в javascript? Скажем, я создаю объект $jsonNameData
из моего набора результатов. Тогда я могу использовать его в javascript как
series: <? echo $jsonNameData ?>
РЕДАКТИРОВАТЬ:
Я смог решить Q1, выполнив следующие действия:
$count = 0; $strSeries = "["; while($r = mysql_fetch_assoc($result)) { if($count == 0){ $strSeries .= "{name:'" . $r['name'] . "',"; $strSeries .= "data:[" . $r['data'] . ']}'; $count = 1; } else { $strSeries .= ",{name:'" . $r['name'] . "',"; $strSeries .= "data:[" . $r['data'] . ']}'; } $rows[] = $r; } $strSeries .= "]";
Получил требуемую строку в $strSeries
.
Теперь проблема – второй вопрос. Я присвоил значение $strSeries
переменной в javascript, но когда я использую эту переменную как
series: variableName
Он не строит график должным образом, даже если переменная имеет правильное значение (проверено с помощью предупреждения).
Не удалось запустить код ниже, но это должно работать или что-то очень похожее на это
$series=array(); while($item = mysql_fetch_assoc($result)) { $serie=array( "name" => $item['name'], "data" => array(floatval($item['data'])) ); array_push($series,$serie); } echo json_encode($series);
Совет должен всегда придерживаться json_encode()
для выполнения jsonification. Вы можете просмотреть этот пример на странице справки, чтобы узнать, как работает json_encode с массивами, в частности
EDIT: ответить на ваш второй вопрос. Возможно, вы столкнулись с высокой ошибкой # 14 в консоли javascript? Посмотрите на этот вопрос. Highcharts возвращает ошибку 14
PS Пожалуйста, не смешивайте несколько вопросов в одном, размещайте их отдельно, также используйте инструменты, такие как javascript console и SO search более эффективно
Я бы попробовал это:
$jsonObj = '['; foreach($mysqlResul as $item){ $jsonObj .= '{"name":"'.$item['name'].'","data":['.$item['data'].']},'; } // strip off last comma $jsonObj = substr(0,strlen($jsonObj)-1,$jsonObj); $jsonObj .= ']';
select concat('{name:"', name, '",data:[', expense, ']}') as foo from bar