Вывод данных на график через цикл
имеется график со статичными данными, мне необходимо что бы данные брались из базы данных, я вывел все ок, но как правильно составить цикл что бы создавалась строка { x: new Date(2017,6,24), y: 31 }, и уже с динамическими данными, спасибо
Модель
public function chart() { // Вывод значений
$params = [
'id' => $_SESSION['account']['id']
];
$data = $this->db->row("SELECT summary_mhs FROM `data` WHERE owner = :id", $params);
$values = array_column($data, 'summary_mhs');
$json_values = json_encode($values);
return $chart = str_replace('"', '', stripslashes($json_values));
}
public function date() { // Вывод даты, когда была добавлена запись
$params = [
'id' => $_SESSION['account']['id']
];
$data = $this->db->row("SELECT date FROM `data` WHERE owner = :id", $params);
$values = array_column($data, 'date');
$json_values = json_encode($values);
return $date = str_replace('"', '', stripslashes($json_values));
}
Скрпт графика
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
title:{
text: "Daily High Temperature at Different Beaches"
},
axisX: {
valueFormatString: "DD MMM,YY"
},
axisY: {
title: "Temperature (in °C)",
suffix: " °C"
},
legend:{
cursor: "pointer",
fontSize: 16,
itemclick: toggleDataSeries
},
toolTip:{
shared: true
},
data: [
{
name: "Nantucket",
type: "spline",
yValueFormatString: "#0.## °C",
showInLegend: true,
dataPoints: [
{ x: new Date(2017,6,24), y: 31 },
{ x: new Date(2017,6,24), y: 34 },
{ x: new Date(2017,6,28), y: 36 },
]
}]
});
chart.render();
function toggleDataSeries(e){
if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
}
else{
e.dataSeries.visible = true;
}
chart.render();
}
}
Ответы (1 шт):
Автор решения: teran
→ Ссылка
Если вам нужен массив пар значений, то почему вы выбираете их двумя различным методами?
сделайте нормальную выборку, например, unix timestamp из базы, будет у вас что-то вроде
$data = $this->db->row("SELECT `date`, summary_mhs FROM data WHERE owner_id = :id", $params);
return json_encode($data);
потом на стороне js вы каким-то образом эти данные получите и сделаете
dataPoints: data.map(function(v){
return { x: new Date(v.date), y: +v.summary_mhs };
}),