将记录存储在父数组中

时间:2017-02-22 14:16:14

标签: php mysql arrays json

我有列date_added,其格式为2017-02-09 08:45:48。我想在同一个月内存储同月的所有记录,比如2月份的记录应该在Feb数组中。我正在尝试使用代码。

$Res = array();
        $query   = $this->pdoConnection->prepare("select id,date from `record` ");
        $query->execute();
        header("Content-type: application/json; charset=utf-8");
        $month = array(1,2,3,4,5,6,7,8,9,10,11,12);
        while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
            $Data = $row;
            $array_date = date("m", strtotime($row['date']));
            $alpha_month = date("M", strtotime($row['date']));
            if(in_array($array_date,$month)){
                $Res[] = array($alpha_month=>array($Data));
            }
        }

        $output = array(
            'response' => $Res
        );  

        echo json_encode($output,JSON_PRETTY_PRINT);

结果

{
    "response": [
        {
            "Jan": [
                {
                    "id": "1",
                    "date_added": "2017-01-03 08:43:09"
                }
            ]
        },
        {
            "Feb": [
                {
                    "id": "4",
                    "date_added": "2017-02-04 10:53:44"
                }
            ]
        },
        {
            "Feb": [
                {
                    "id": "2",
                    "date_added": "2017-02-12 08:59:15"
                }
            ]
        }
    ]
}

正如你所看到的,我的代码是返回2月的单独数组,但我想存储两个内部的Feb数组。我尝试过不同的逻辑,但仍面临同样的问题。

2 个答案:

答案 0 :(得分:0)

你可以尝试

$Res[$alpha_month][] = $data;

这只会在当月为您的数组添加一个条目,您也不再需要if(in_array($array_date,$month))

答案 1 :(得分:0)

对我上面的简短评论稍微详细一点:

  

而是$ Res [] = array($ alpha_month => array($ Data));你可以做$ Res [$ alpha_month] [] = $ Data;

目前你在这个while循环中获取所有结果元组,这是准确和正常的。但是如果你想将一些结果“分组”在一个数组中,可以采用的方法之一是:

$Res[$alpha_month][] = $Data;

使用此代码,您可以“推送”$ Res数组中的结果($ Data)。重要的部分是第一个与新结构相关的数组层$Res[$alpha_month]

array('JAN', 'FEB', ...);

第二个[]为第一层声明,在这种情况下,它是您的月份组,另一个数组。您可能会在第一次推送每月结果时获得PHP WARNINGS,因为$Res[$alpha_month][]会在您的数组中导致两级声明。

在第一个声明中,如前所述,您将所有组/月推入阵列!但同时,php期望第一次迭代,也是一个数组:($Res[$alpha_month][]

所以干净的解决方案如下:

if(!isset($Res[$alpha_month])){
    $Res[$alpha_month] = array(); // You can also use []; instead array();
}
$Res[$alpha_month][] = $Data;

使用该片段,您首先检查$Res[$alpha_month]是否存在 - 如果当前图层不可用,也会声明一个数组。