javascript - 将 PHP 数组发送到 JSON 时是否应该删除前导 "0"?

标签 javascript php chart.js

我的项目是使用“Chart.Js”创建条形图。

图表应显示一年中所有周的记录。数据来自 MySQL 中的日期时间列。

我就是这样做的:
首先我在 MySQL 中选择:

$query = "SELECT datetime_start FROM table WHERE datetime_start LIKE '2020%' ORDER BY datetime_start ASC";

现在我有这样的记录:2020-03-12 09:38:00

要将日期按周分组,我这样做:

while($row = $stmt->fetch()){
    
    $date = new DateTime($row['datetime_start']);
    $week = $date->format("W");
    
    $data[$week]++;
}

然后我将其发送给 JS: echo json_encode($data);

在 JS 中,我执行了 console.log(result) 并得到一个列表,其中键代表星期,值是我在那一周有多少个日期。

这就是我的问题发生的地方! 列表已排序:

{10: 42, 11: 40, 12: 40, 13: 44, 14: 26, 15: 33, 16: 27, 17: 31, 18: 21, 19: 21, 20: 20, 21: 22, 22: 25, 23: 22, 24: 19, 25: 7, 26: 9, 27: 6, 28: 1, 29: 6, 30: 5, 31: 7, 32: 1, 33: 5, 34: 5, 35: 6, 36: 4, 37: 2, 38: 2, 39: 4, 40: 2, 41: 3, 42: 2, 43: 3, 44: 3, 45: 3, 46: 2, 47: 2, 48: 6, 49: 4, 50: 4, 51: 2, 52: 2, 53: 1, 01: 23, 02: 25, 03: 34, 04: 43, 05: 31, …}

第 10 周在第 01 周之前。这将导致我的图表如下所示:

enter image description here

哪种方法最能解决这个问题?

我已在 Php.net 中检查了周数中没有前导零的日期时间对象 (format('w')),但它不存在。

我应该用 PHP 或 JS 删除前导零来解决这个问题吗?我认为 PHP 数组从 01 开始是正确的,但是当我将其解码为 JSON 时,顺序发生了变化,10 将成为对象中的第一个键?!

编辑

我的 PHP 看起来不错:

Array ( [01] => 23 [02] => 25 [03] => 34 [04] => 43 [05] => 31 [06] => 37 [07] => 32 [08] => 34 [09] => 45 [10] => 42 [11] => 40 [12] => 40 [13] => 44 [14] => 26 [15] => 33 [16] => 27 [17] => 31 [18] => 21 [19] => 21 [20] => 20 [21] => 22 [22] => 25 [23] => 22 [24] => 19 [25] => 7 [26] => 9 [27] => 6 [28] => 1 [29] => 6 [30] => 5 [31] => 7 [32] => 1 [33] => 5 [34] => 5 [35] => 6 [36] => 4 [37] => 2 [38] => 2 [39] => 4 [40] => 2 [41] => 3 [42] => 2 [43] => 3 [44] => 3 [45] => 3 [46] => 2 [47] => 2 [48] => 6 [49] => 4 [50] => 4 [51] => 2 [52] => 2 [53] => 1 )

JSON 变得困惑:

{10: 42, 11: 40, 12: 40, 13: 44, 14: 26, 15: 33, 16: 27, 17: 31, 18: 21, 19: 21, 20: 20, 21: 22,…}

最佳答案

不要使用关联数组,使用索引数组。首先创建一个包含 53 个元素的数组,然后在循环中更新它。

$data = array_fill(0, 53, 0);
while($row = $stmt->fetch()){

    $date = new DateTime($row['datetime_start']);
    $week = $date->format("W");

    $data[intval($week)]++;
}

关于javascript - 将 PHP 数组发送到 JSON 时是否应该删除前导 "0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60650468/

相关文章:

php - 如何在不下载的情况下在浏览器中显示图像?

php - Yii2 从 afterSave 触发模型/记录更新

php - 在 gearman 工作人员之间共享 curl 处理程序

javascript - 自动标签更新

javascript - Chart JS - 基于时区的 X 轴

Javascript onClick 更改 ASP 页面上图像的边框

javascript - 如何用步骤流程实现 react 导航图标

javascript - Idea 看不到导入

javascript - 2个表,需要为每个匹配行设置最大高度的行

javascript - chartjs-plugin-zoom 不适用于我的 React 项目