【问题标题】:How to create json data from multidimension array (each month in year)如何从多维数组创建json数据(一年中的每个月)
【发布时间】:2014-07-23 19:13:56
【问题描述】:

我需要为 highchart 导出一组 json 数据。但我在循环时遇到问题。 我有 2 组数组:

  1. 年份数组 (2015,2014,2013,2012) - 形成 MySQL
  2. 月份数组 (01,02,03,04,05,06,07,08,09,10,11,12)

所以我把它做成数组 - 多维的。使用此代码。

$sql_arrYr=mysqli_query($con,"select year(bk_date1) as arrYr from booking_db group by year(bk_date1) order by arrYr asc");
while($rec_arrYr=mysqli_fetch_array($sql_arrYr)){
    $arrYr[$rec_arrYr['arrYr']]=array("01","02","03","04","05","06","07","08","09","10","11","12");
}

那么我有:

Array ( [2015] => Array ( [0] => 01 [1] => 02 [2] => 03 [3] => 04 [4] => 05 [5] => 06 [6] => 07 [7] => 08 [8] => 09 [9] => 10 [10] => 11 [11] => 12 )...);

这看起来不错,因为我在一组数组中包含了我需要的所有数据 - 年份和每个月的值。

所以我继续使用这段代码从 mySQL 中获取数据。

foreach($arrYr as $key=>$val){
    $rows=array();
    $rows[type]='spline';
    $rows[name]=$key;

    foreach($val as $mon){
        $sql_nBk=mysqli_query($con,"select count(*) as nBkr from booking_db where year(bk_date1)='$key' and month(bk_date1)='$mon'");
        $rec_nBk=mysqli_fetch_array($sql_nBk);
            $rows[data][]=$rec_nBk['nBkr']; 
    }
}

echo json_encode($rows);

问题发生在这里。这不是循环。我唯一的行是。

{"type":"spline","name":2015,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}

这是我的期望:

{"type":"spline","name":2015,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}
{"type":"spline","name":2014,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}
{"type":"spline","name":2013,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}
{"type":"spline","name":2012,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}

请给我一个为什么它不是循环的原因。即使我把它们放在一个正确的循环中。

【问题讨论】:

  • 您在循环的每次迭代中将$rows 重置为一个空数组...
  • 我不明白。请具体。
  • 尝试在逻辑上遵循自己的代码,尤其是循环的最后一次迭代。
  • 请给我一个线索。我应该在第二个循环中使用foreach 还是其他什么?

标签: php mysql arrays json foreach


【解决方案1】:

您每次通过外循环都将$rows 设置为一个空数组。此外,您不能有重复的密钥。第一个type 被下一个覆盖(还有namedata),所以你必须使它成为多维的。您可以使用$key 变量来简化此操作,或者实现一个计数器$i 并使用$i++ 或其他东西。

$i = 0;
foreach($arrYr as $key=>$val){
    $rows[$i]['type']='spline';
    $rows[$i]['name']=$key;

    foreach($val as $mon){
        $sql_nBk=mysqli_query($con,"select count(*) as nBkr from booking_db where year(bk_date1)='$key' and month(bk_date1)='$mon'");
        $rec_nBk=mysqli_fetch_array($sql_nBk);
            $rows[$i]['data'][]=$rec_nBk['nBkr']; 
    }
    $i++;
}
echo json_encode($rows);

【讨论】:

  • AbraCadaver。代码产生了错误的格式:"2015":{"type":"spline","name":2015,"data":["9","8","0","0","0","0","0","0","0","0","0","0"]}}
  • 已编辑。尝试一个基于 0 的计数器。
  • 完美!阿布拉尸体。格式正确,代码现在很棒。非常感谢。
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
相关资源
最近更新 更多