PHP数组是否为正确的JSON格式?
我已经制作了一个脚本来跟踪我网站上的访问者,现在我想用JSON在谷歌折线图中显示每天的访问者数量 这是我编写的一些PHP代码,用于在数组中显示当天的日期和访问量: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
$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);