Изменить формат данных JSON для использования с диаграммой FLOT
Я пытаюсь создать объект JSON для хранения данных для использования с диаграммой FLOT. Документация говорит, что формат данных должен быть массивом точек, подобных этому:
[ [1, 3], [2, 14.01], [3.5, 3.14] ]
Проблема, с которой я столкнулся, заключается в том, что мой вызов AJAX возвращает объект JSON с форматом данных, подобным этому:
Rate: [96, 74, 73, 96, 124, 104]
Year: [2008, 2009, 2010, 2011, 2012, 2013]
Может кто-нибудь объяснить, как мне следует изменить этот код, чтобы он создавал правильный формат данных, необходимый для диаграммы FLOT? Благодарю.
function ajaxmuniChart1c(){
$muni = $this->input->POST('muni');
$q = $this->db->query("SELECT SaleYear AS Y, NewSaleType AS T, count(*) AS C, format((sum(SalePrice) / sum(Quantity1)),0) AS R FROM tblsales WHERE tblsales.SaleYear > 2007 AND tblsales.Quantity1 > 2000 AND (tblsales.NewSaleType = 'Industrial') AND tblsales.Municipality = '".$muni."' GROUP BY T,Y ORDER BY T,Y");
$json_SaleYear = array();
$json_AvrgRate = array();
foreach ($q->result_array() as $row){
$json_SaleYear[] = $row['Y'];
$json_AvrgRate[] = $row['R'];
}
$json['Year'] = $json_SaleYear;
$json['Rate'] = $json_AvrgRate;
echo json_encode($json);
exit;
}
2 ответа
Поместите их в одну строку в точке размещения их в массиве PHP во время foreach
Цикл результатов:
/**
* Bind the two on the
* same row whilst looping
* the results
**/
foreach ( $q->result_array() as $row ){
$JsonArray[] = array( $row['Y'] => $row['R'] );
}
/**
* Expected Array Result:
**/
print_r( $JsonArray );
Array
(
[0] => Array
(
[2008] => 96
)
[1] => Array
(
[2009] => 74
)
/**
* echo this out as an JSON String
**/
echo json_encode( $JsonArray );
И это даст вам:
[{"2008":96},{"2009":74},{"2010":73},{"2011":96},{"2012":124},{"2013":104}]
Как описано в документации, вы можете предоставить метку для ваших данных. Чтобы сделать это, вам нужно поместить его в многомерный массив, который разветвляет:
- этикетка
- Данные
Прежде чем кодировать его в массив JSON, мы можем соединить их вместе:
/**
* Create a new variable
* two join the two
**/
$WithLabels = array(
"label" => "Sales by Years",
"data" => $JsonArray
);
echo json_encode( $WithLabels );
Кодируя это, мы наконец получаем следующее:
{
"label" : "Sales by Years",
"data" : [{"2009":74},
{"2010":73},
{"2011":96},
{"2012":124},
{"2013":104}]
}
Поместите их в массив PHP во время цикла результатов foreach
// PHP CODE
$data = array(); // empty array
foreach ($query as $k=>$row) {
$data[] = array($k, $row->total_price); // store data in array
}
echo json_encode($data); // json encode
Ответ Ajax на успех
success: function(msg) {
var d1 = msg;
console.log(d1);
$.plot($("#chart_lines_fill_nopoints"), [d1]); //chart_lines_fill_nopoints id name
}
// Data Should be in this format
//array(array(1,300),array(1,1300),array(1,200),array(1,500)); etc
// should be in json result
[[1, 7.8], [2, 7.8], [3, 20.0], [4, 7.8], [5, 7.8]]
это оно