【问题标题】:How to properly setup a PHP while loop without duplicate data being repeated如何正确设置 PHP while 循环而不重复重复数据
【发布时间】: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


【解决方案1】:

在 GrumpyCrouton 的指导下,我得以实现我想要的结果。

$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'];
    $newData[$tmp_key][] = $selected_row['userCount'];
}
$jsonResult = json_encode($newData);


echo $jsonResult;

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多