【问题标题】:From SQL table to JSON through PHP通过 PHP 从 SQL 表到 JSON
【发布时间】:2016-07-11 21:39:27
【问题描述】:

这几天我一直在努力解决这个问题,但我找不到合适的解决方案。

我想通过 PHP 从这个数据库表中检索数据:

databse table

再一次使用 php,得到类似于以下的 JSON 输出:

[{
"label": "2013-01-07",
"value": "4"
}, {
    "label": "2013-01-06",
    "value": "65"
}, {
    "label": "2013-01-05",
    "value": "96"
}]

我编写了一个从表中检索信息的函数,但我无法将它们按正确的顺序排列,而且可能有更好的方法来做到这一点..

function getUsersCountOnDate()
{
    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC");
    while($row = mysql_fetch_array($result)){
    $date[] = $row['date'];
    }

    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC");
    while($row = mysql_fetch_array($result)){
    $count[] = $row['count'];
    }

    $merged = array_merge($date, $count);

    return json_encode($merged);
}

我检索的内容是这样的: ["2016-03-18","2016-03-13","2016-03-11","2016-03-06","2016-03-04","6","1"," 1","1","1"]

谁能帮帮我?

【问题讨论】:

  • 不要使用任何以mysql_开头的函数。它们已过时,未维护,已从 PHP 7+ 中删除,并且不安全。使用等效的 mysqli_ 函数或现代的 PDO 数据库类。

标签: php mysql json


【解决方案1】:

首先,使用PDO或mysqli函数进行数据库查询。

array_merge() 会将第一个数组放在第二个数组之前。例如: $array1 = array('red', 'yellow'); $array2 = array('blue', 'green'); $arrayMerged = array_merge($array1, $array2); $arrayMerged is now array(red,yellow,blue,green);

由于您正在执行的查询是相同的,您可以这样做:

$result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC");
    $i = 0;
    while($row = mysql_fetch_array($result)){
        $date[$i][label] = $row['date'];
        $date[$i][value] = $row['count'];
        $i++;
    }

$newArray = json_encode($date);

【讨论】:

  • 谢谢你的提示,但现在我有这个:[{"label":"2016-03-18"},{"value":"6"},{"label": "2016-03-13"},{"value":"1"},{"label":"2016-03-11"},{"value":"1"},{"label":"2016 -03-06"},{"value":"1"},{"label":"2016-03-04"},{"value":"1"}] 但我需要标签和值在一起了,怎么办?
  • @user2431729,抱歉看到更新的答案 :) 现在应该可以正常工作了 :) 没有测试代码 ;) 所以如果仍然不正确,请再次回答 ;)
  • 没问题@user2431729。很高兴我能帮上忙。
【解决方案2】:

试试

echo json_encode($merged);

有时自己返回是不够的。 例如,如果您想在 ajax 调用中接收 json,则必须对其进行回显。

另外,你应该看看 PDO 而不是使用普通的旧 mysql 函数。

【讨论】:

    【解决方案3】:

    请这样使用:

    function getUsersCountOnDate()
    {
        $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC");
        while($row = mysql_fetch_array($result)){
        $dates[] = $row['date'];
        }
    
        $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC");
        while($row = mysql_fetch_array($result)){
        $count[] = $row['count'];
        }
    
        $dates = array("2013-01-07", "2013-01-06", "2013-01-05");
       $count = array("4", "65", "96");
      $i = 0;
      foreach ($dates as $date)
     {
         $newArray[$i]['label'] = $date;
         $newArray[$i]['value'] = $count[$i];
         $i++;
     }
     ///print_r($newArray);
    
        return json_encode($newArray);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多