Преобразование многомерного массива из PDO в два простых массива для диаграммы - PullRequest
0 голосов
/ 16 июня 2019

У меня есть MariaDB со статьями, и у каждой статьи есть дата.Я хочу отобразить гистограмму с количеством статей на дату.

Я получаю данные с этим кодом:

$statement = $pdo->prepare(
"   SELECT
        Date(a_timestamp) AS thedate,
        count(a_timestamp) AS counted
    FROM `$dbtable`
    WHERE Year(a_timestamp) = '2019'
    GROUP BY thedate
    ORDER BY thedate
");
$statement->execute();
$result = $statement->fetchAll();
var_dump($result);
print json_encode($result);

С результатом:

array(2) {
  [0]=>
  array(4) {
    ["thedate"]=>
    string(10) "2019-06-15"
    [0]=>
    string(10) "2019-06-15"
    ["counted"]=>
    string(2) "30"
    [1]=>
    string(2) "30"
  }
  [1]=>
  array(4) {
    ["thedate"]=>
    string(10) "2019-06-16"
    [0]=>
    string(10) "2019-06-16"
    ["counted"]=>
    string(2) "29"
    [1]=>
    string(2) "29"
  }
}

[{"thedate":"2019-06-15","0":"2019-06-15","counted":"30","1":"30"},{"thedate":"2019-06-16","0":"2019-06-16","counted":"29","1":"29"}]

Мне нужно для Chart.js что-то вроде этого (https://www.chartjs.org/docs/latest/getting-started/):

labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
data: [0, 10, 5, 2, 20, 30, 45]

Как мне преобразовать результат, чтобы он соответствовал Chart.js?

Я думаю, что есть много способов:Изменение результата PDO, преобразование полученного массива и редактирование массива с помощью js.

Я попытался изменить результат PDO с помощью fetchColumn, но затем я могу извлечь только один столбец и выполнить два запроса SQL - верно?

Я пытался преобразовать полученный массив с помощью $singleD = array_reduce($result, 'array_merge', array());, но не уместился.

Я попробовал два учебника Chart.js, но я думаю, что входные данные json не были правильно отформатированы. https://www.dyclassroom.com/chartjs/chartjs-how-to-draw-bar-graph-using-data-from-mysql-table-and-php и https://phppot.com/php/creating-dynamic-data-graph-using-php-and-chart-js/

1 Ответ

0 голосов
/ 17 июня 2019

Я использовал array_column(), чтобы получить данные JSON. Очень простое решение:

$thedate = json_encode(array_column($result, 'thedate'));
$counted = json_encode(array_column($result, 'counted'));

и получил его в чартах с "labels": <?php print($thedate);?>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...