Php 如何从多维数组创建json数据(每年每月)
我需要为highchart导出一组json数据。但我有一个循环的问题。 我有两套阵列:Php 如何从多维数组创建json数据(每年每月),php,mysql,arrays,json,foreach,Php,Mysql,Arrays,Json,Foreach,我需要为highchart导出一组json数据。但我有一个循环的问题。 我有两套阵列: 年份数组(20152014201312012)-表单MySQL 月数组(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 arr
$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");
}
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);
然后我有:
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获取数据
$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");
}
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
设置为空数组。此外,您不能有重复的密钥。第一个类型
会被下一个类型(也就是名称
和数据
)覆盖,因此必须使其多维化。您可以使用$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);
在循环的每次迭代中,您都要将
$rows
重置为空数组…我不明白。请具体一点。试着按照你自己的代码逻辑,特别是循环的最后一次迭代。请给我一个线索。我应该在第二个循环中使用foreach
,还是其他什么。代码生成了错误的格式:“2015”:{“类型”:“样条线”、“名称”:2015,“数据”:[“9”、“8”、“0”、“0”、“0”、“0”、“0”、“0”、“0”、“0”、“0”]}
已编辑。尝试一个基于0的计数器。完美!尸体。格式正确,代码现在非常出色。非常感谢你。