【发布时间】:2020-08-27 10:10:26
【问题描述】:
我查看了无数以前的问题,但找不到与我遇到的问题相同的问题。我有一个工作脚本,可以从数据库中获取我需要的数据。
<?php
$result = $conn->query("SELECT COUNT(colUser) AS userCount, colMonth as userMonth, colYear as userYear FROM MyTable GROUP BY userYear");
$newData = array();
$years = array();
$cnt = array();
while($selected_row = $result->fetch(PDO::FETCH_ASSOC)) {
array_push($years,$selected_row['userMonth']);
$tmp_key = $selected_row['userYear'];
array_push($cnt,$selected_row['userCount']);
$newData[$tmp_key] = array(
implode(',',$cnt)
);
}
$jsonResult = json_encode($newData);
echo $jsonResult;
我需要的输出是
{
"2018": ["292,181,1868,1074,2726,2213,2616,3269,1744,2839,1983,1689"],
"2019": ["2179,2027,1948,2071,2323,1963,2721,4065,4626,4660,3783,3170"],
"2020": ["4308,3307,6143,6795,1881"]
}
我得到的输出是
{
"2018": ["292,181,1868,1074,2726,2213,2616,3269,1744,2839,1983,1689"],
"2019": ["292,181,1868,1074,2726,2213,2616,3269,1744,2839,1983,1689,2179,2027,1948,2071,2323,1963,2721,4065,4626,4660,3783,3170"],
"2020": ["292,181,1868,1074,2726,2213,2616,3269,1744,2839,1983,1689,2179,2027,1948,2071,2323,1963,2721,4065,4626,4660,3783,3170,4308,3307,6143,6795,1881"]
}
另外,如果可能的话,更理想的输出将是(用零填充空白月份)
{
"2018": ["292,181,1868,1074,2726,2213,2616,3269,1744,2839,1983,1689"],
"2019": ["2179,2027,1948,2071,2323,1963,2721,4065,4626,4660,3783,3170"],
"2020": ["4308,3307,6143,6795,1881,0,0,0,0,0,0,0"]
}
衷心感谢您的帮助!
【问题讨论】:
-
为什么将值作为单个字符串存储在数组中?换句话说,您可以直接使用
$newData[$tmp_key] = $cnt而不是implode(','$cnt)- 如果您不想重复值,您需要保留已使用的值列表并确保不会再次添加您的值。如果我们能在你的 while 循环之前看到你的数据是如何格式化的,那也会对我们有很大帮助。 -
我刚刚开始尝试使用 JSON 创建的 PHP 数组。我不会说我是数组新手,但还不是完全中级。所以,如果我做错了事,我是不知道的。
-
while循环前的数据就是SQL查询返回的数据。没什么特别的。数据库只有年和月列,然后是用户 ID。我知道我可以通过第二个查询完成我想要的,但我试图避免这样做。
标签: php arrays json while-loop