PHP数组是否为正确的JSON格式?

PHP数组是否为正确的JSON格式?,php,arrays,json,Php,Arrays,Json,我已经制作了一个脚本来跟踪我网站上的访问者,现在我想用JSON在谷歌折线图中显示每天的访问者数量 这是我编写的一些PHP代码,用于在数组中显示当天的日期和访问量: $dateQuery = $db->prepare("SELECT date FROM tracked"); $dateQuery->execute(); $rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC); $array = array(); foreach ( $rows

我已经制作了一个脚本来跟踪我网站上的访问者,现在我想用JSON在谷歌折线图中显示每天的访问者数量

这是我编写的一些PHP代码,用于在数组中显示当天的日期和访问量:

$dateQuery = $db->prepare("SELECT date FROM tracked");
$dateQuery->execute();
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC);
$array = array();
foreach ( $rows as $row ) {
    $day = explode(' ', $row['date']);
    if ( !key_exists($day[0], $array) ) {
        $array[$day[0]] = 0;
    }
    $array[$day[0]] += 1;
}
这是我打印数组时的输出:

现在,为了让这个输出在Google Charts API中工作,我需要JSON格式如下:

[["2016-02-18",6],["2016-02-17",5]]
相反,我用json_encode($array)得到了这个结果:


我现在对数组和循环有了基本的了解,但我似乎想不出解决问题的方法。

只编写了一些简单的代码来转换数组

<?php
$array = [];
$array['2016-01-17'] = 7;
$array['2016-02-18'] = 6;

echo json_encode($array); // output is: {"2016-01-17":7,"2016-02-18":6}

$arrayInRightFormat = [];

foreach ($array as $i => $value) {
  $arrayInRightFormat[] = [$i, $value];
}

echo json_encode($arrayInRightFormat); // output is: [["2016-01-17",7],["2016-02-18",6]]

首先,您可以轻松优化查询,使数据看起来完全符合您的需要,而不必在以后进行不必要的循环:

$dateQuery = $db->prepare("SELECT 
        DATE(date) AS date,
        COUNT(tracked.id) AS count
    FROM tracked
    GROUP BY DATE(date)");
$dateQuery->execute();
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC);
(我不知道您的表是否有“id”列,但我相信您已经了解了)。然后就很容易了

$result = array();
foreach ( $rows as $row ) {
    $result[] = array($row['date'], $row['count']);
}
echo json_encode($result);

不要使用日期作为键。制作一个包含日期和访客数的数组。太棒了!它成功了。不幸的是,谷歌图表API现在认为我的日期是一个字符串。你知道有什么解决办法吗?它只接受这样的内容:[新日期(2016,2,17),5](5是访客计数)。您可以通过javascript转换它:新日期('2011-04-11')实现了这一点。如果在js:for(i=0;i日期(日期)
分组,而不是简单地按
日期
分组。
$dateQuery = $db->prepare("SELECT 
        DATE(date) AS date,
        COUNT(tracked.id) AS count
    FROM tracked
    GROUP BY DATE(date)");
$dateQuery->execute();
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC);
$result = array();
foreach ( $rows as $row ) {
    $result[] = array($row['date'], $row['count']);
}
echo json_encode($result);