PHP数组为正确的JSON格式?

时间:2016-02-18 09:05:43

标签: php arrays json

我已制作了一个脚本来跟踪我网站上的访问者,现在我想用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;
}

这是我print_r数组时的输出:

array output

现在要将此输出用于Google Charts API,我需要JSON格式如下:

[["2016-02-18",6],["2016-02-17",5]]

相反,我得到了json_encode($ array):

{"2016-02-17":5,"2016-02-18":6}

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

2 个答案:

答案 0 :(得分:1)

刚写了一些简单的代码来转换你的数组。

<?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]]

Defacto你使用你的数组就像一个带有字符串键的HashMap,所以它被转换为一个字典。

更好的想法是让mysql数据库聚合数据,然后将其直接转换为正确的格式!

<?php
$dateQuery = $db->prepare("SELECT DATE(date) as day,count(*) as hits FROM tracked GROUP BY DATE(date)");
$dateQuery->execute();
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC);

$array = array();
foreach ( $rows as $row ) {
  $array[] = [$row['day'], $row['hits']];
}

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

答案 1 :(得分:1)

您可以在一开始就轻松优化查询,使您的数据看起来完全像您需要的,而不会在以后出现不必要的循环:

$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);

(我不知道你的桌子是否有一个&#34; id&#34;列,但我确定你明白了这一点)。然后它就像

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