arrays - 将多维数组从 PDO 转换为图表的两个简单数组
问题描述
我有一个包含文章的 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-动态数据图使用 php 和图表 js/
解决方案
我曾经array_column()
获取json数据。一个非常简单的解决方案:
$thedate = json_encode(array_column($result, 'thedate'));
$counted = json_encode(array_column($result, 'counted'));
并在 chartjs 中使用"labels": <?php print($thedate);?>
.
推荐阅读
- google-cloud-dataflow - 使用 Pubsub 到 BigQuery 设置数据流会出现错误
- jquery - 显示控制台日志选择的数据
- python - Tensorflow 在家用 PC 上的 GPU 上运行,但不在 Google colab 上
- php - 从中选择表
- python-3.x - 如何在python中制作词频矩阵
- qt - Qml 代表一个单独的文件
- c++ - 在 Visual Studio 中运行代码时出现数百个构建错误
- azure - 在 Service Fabric Mesh 中公开多个服务
- ruby-on-rails - 在将 Rails 从 4.1 更新到 5.2 并添加响应者 gem 后,为我的控制器获取“未定义的方法 `flash`”
- reactjs - 使用异步 componentDidMount 测试 React Router 重定向