Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从多维数组创建json数据(每年每月)_Php_Mysql_Arrays_Json_Foreach - Fatal编程技术网

Php 如何从多维数组创建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

我需要为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 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的计数器。完美!尸体。格式正确,代码现在非常出色。非常感谢你。