yii2 — PHP-массив ChartJs на «метки» и «наборы данных»

Я использую с помощью Yii2 с Библиотека ChartJS, Я хотел бы спросить, если это возможно, чтобы вставить массив в метки и диапазон данных.

Это мой код сейчас:

<?= ChartJs::widget([
'type' => 'line',
'options' => [
'height' => 400,
'width' => 800,
],
'data' => [
'labels' => [$m[0], $m[1], $m[2], $m[3], $m[4], $m[5], $m[6], $m[7], $m[8], $m[9], $m[10], $m[11]],
'datasets' => [
[
'label' => "2018",
'backgroundColor' => "rgba(255,99,132,0.2)",
'borderColor' => "rgba(255,99,132,1)",
'pointBackgroundColor' => "rgba(255,99,132,1)",
'pointBorderColor' => "#fff",
'pointHoverBackgroundColor' => "#fff",
'pointHoverBorderColor' => "rgba(255,99,132,1)",
'data' => [$t[0], $t[1], $t[2], $t[3], $t[4], $t[5], $t[6], $t[7], $t[8], $t[9], $t[10], $t[11]]
],
]
]
]); ?>

Как вы можете видеть, я устанавливаю значение, определяющее позицию в массиве каждого элемента.

Я пытался сделать что-то подобное:

$tot = "\"" . implode($t, ", \"") . "\"";

Приведенный выше код дает такой результат:

"0", "12", "5", "7", ...

Но если я попытаюсь сделать что-то подобное, это не сработает:

'data' => [$tot] or 'data' => $tot

Является ли это возможным?

2

Решение

Я делал это так:

var ctx = document.getElementById("Chart1"); // the element where the chart should be rendered
var myChart1 = new Chart(ctx, {
type: 'line',
data: {
labels: [<?php
foreach( $m as $key => $row) {
echo "'".$row['label']."', "; // you can also use $row if you don't use keys
}
} ?>],

datasets: [{
label: '2018',
data: [<?php
foreach( $t as $key => $row) {
echo "'".$row['data']."', "; // you can also use $row if you don't use keys
} ?>],
backgroundColor => "rgba(255,99,132,0.2)",
borderColor => "rgba(255,99,132,1)",
pointBackgroundColor => "rgba(255,99,132,1)",
pointBorderColor => "#fff",
pointHoverBackgroundColor => "#fff",
pointHoverBorderColor => "rgba(255,99,132,1)",
}]
},
options => [
'height' => 400,
'width' => 800,
]
});

Я создаю диаграмму с помощью JavaScript и добавляю данные из моего массива php.

Вы можете отобразить диаграмму, добавив элемент с вышеуказанным идентификатором.

PHP используется для обработки данных и JS для отображения данных.
Поэтому используйте JS для отображения диаграммы и PHP для обработки данных.

В вашем случае вы можете просто сделать это:

<?php
$data = array(foreach( $t as $key => $row) {
echo "'".$row['data']."', "; // you can also use $row if you don't use keys
});
$labels = array(foreach( $m as $key => $row) {
echo "'".$row['label']."', "; // you can also use $row if you don't use keys
});
?>

<?= ChartJs::widget([
'type' => 'line',
'options' => [
'height' => 400,
'width' => 800,
],
'data' => [
'labels' => $labels,
'datasets' => [
[
'label' => "2018",
'backgroundColor' => "rgba(255,99,132,0.2)",
'borderColor' => "rgba(255,99,132,1)",
'pointBackgroundColor' => "rgba(255,99,132,1)",
'pointBorderColor' => "#fff",
'pointHoverBackgroundColor' => "#fff",
'pointHoverBorderColor' => "rgba(255,99,132,1)",
'data' => $data
],
]
]
]); ?>
1

Другие решения

Моя ошибка была в другой части кода, связанной с массивами. Я выложу правильное решение:

<?= ChartJs::widget([
'type' => 'line',
'options' => [
'height' => 400,
'width' => 800,
],
'data' => [
'labels' => $labels,
'datasets' => [
[
'label' => "2018",
'backgroundColor' => "rgba(255,99,132,0.2)",
'borderColor' => "rgba(255,99,132,1)",
'pointBackgroundColor' => "rgba(255,99,132,1)",
'pointBorderColor' => "#fff",
'pointHoverBackgroundColor' => "#fff",
'pointHoverBorderColor' => "rgba(255,99,132,1)",
'data' => $data,
],
]
]
]); ?>

Это PHP для получения данных текущей недели:

$labels = array();
$data = array();

$curweek = date('Y-m-d', strtotime("previous monday"));
$today = date('Y-m-d');

$dates = new DatePeriod(
DateTime::createFromFormat('Y-m-d|', $curweek),
new DateInterval('P1D'),
DateTime::createFromFormat('Y-m-d|', $today)->add(new DateInterval('P1D'))
);

foreach ($dates as $date) {
$datestr = $date->format('Y-m-d');
$index = array_search($datestr, array_column($chartvalue, 'dataNl'));
if ($index === false) {
$labels[] = date("d", strtotime($datestr));
$data[] = 0;
} else {
$labels[] = date("d", strtotime($datestr));
$data[] = $chartvalue[$index]['totale'];
}
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector