Как я могу адаптировать данные моего массива к массиву стилей матрицы Google диаграммы в PHP?

В моем приложении мне нужно создать массив, который я отправлю на мой взгляд, чтобы построить Google Chart.

Окончательный результат должен выглядеть следующим образом:

data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
[2004,  null,      400],
[2005,  1170,      null],
[2006,  660,       1120],
[2023,  1030,      540]
]);

Исходные данные у меня есть:

$sales = array(2005=>1170, 2006=>660, 2023=>1030);
$expenses = &array(2004=>400, 2006=>1120, 2023=>540);

Как я могу адаптировать эти данные к требуемому формату?
Конечно, мне нужно, чтобы это было&крышка для любого размера.

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

Как я могу решить это?

0

Решение

Вы можете сделать 3 массива или сделать массив с 3 индексами из массивов.

<?php

$data = array();
$data['Year'] = array(2004, 2005, 2006, 2023);
$data['Sales'] = array(1000, 1170, 660, 1030);
$data['Expenses'] = array(400, null, 1120, 540);

?>

Затем вы можете перебирать каждую строку или столбец по своему усмотрению. Вы также можете заполнить или прочитать, используя FOR цикл:

<?php
echo "data = google.visualization.arrayToDataTable([\r\n";
echo "['Year', 'Sales', 'Expenses'],\r\n";

for($i=0;$i<count($data['Year'];$i++)){
echo "[" . $data['Year'][$i] . ", " . $data['Sales'][$i] . ", " . $data['Expenses'] . "],\r\n";
}

echo "]";
?>

Если ваши значения более динамичны, то есть вы можете не получить одинаковое количество индексов в каждом массиве, просто возьмите счетчик каждого из них и установите ограничитель на эту длину в цикле. Вы можете использовать empty(), чтобы проверить, есть ли значение, и заменить на null по мере необходимости.

Обновить:

С этим типом набора данных:

$sales = array(2005=>1170, 2006=>660, 2023=>1030);
$expenses = &array(2004=>400, 2006=>1120, 2023=>540);

Вам трудно выровнять индексы. Например 2005 в одном, а 2004 в другом, но не в обоих. Я думаю, что вам нужно пройтись по каждому и составить список индексов из обоих. В результате чего: 2004, 2005, 2006, 2023,

<?php
$indexes = array();
foreach($sales as $k => $v){
$indexes[] = $k;
}
foreach($expenses as $k => $v){
$indexes[] = $k;
}

sort($indexes);
echo "data = google.visualization.arrayToDataTable([\r\n";
echo "['Year', 'Sales', 'Expenses'],\r\n";
foreach($indexes as $in){
if(empty($sales[$in])){
echo "[$in, null, {$expenses[$in]}],\r\n";
} elseif(empty($expenses[$in])) {
echo "[$in, {$sales[$in]}, null,\r\n";
} else {
echo "[$in, {$sales[$in]}, {$sExpenses[$in]}],\r\n";
}
}
echo "]";
?>
1

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

Почему бы не иметь массив массивов и вывести это? Что-то вроде ниже должно работать

$visualizationDataTable = [
['Year', 'Sales', 'Expenses'],
[2004, 1000, 400],
[2005, 1170, null],
[2006, 660, 1120],
[2023, 1030, 540]
];

echo "data = google.visualization.arrayToDataTable([";
foreach($visualizationDataTable as $visualizationDataTableRow) {
echo "[";
foreach($visualizationDataTableRow as $visualizationDataTableColumn) {
if(is_string($visualizationDataTableColumn)) {
echo "'$visualizationDataTableColumn'";
} else if(is_numeric($visualizationDataTableColumn)) {
echo "$visualizationDataTableColumn";
} else if(is_null($visualizationDataTableColumn)) {
echo "null";
}

echo ",";
}
echo "],";
}
echo "]);";
0

По вопросам рекламы [email protected]