Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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数组转换为另一种json数组格式,该格式将时间和id属性分组为相同日期?_Php_Json - Fatal编程技术网

Php 如何将具有相同日期但不同时间的json数组转换为另一种json数组格式,该格式将时间和id属性分组为相同日期?

Php 如何将具有相同日期但不同时间的json数组转换为另一种json数组格式,该格式将时间和id属性分组为相同日期?,php,json,Php,Json,我有一个json数组,其中包含ID、datetimes和soldout属性,如下所示: [ { "id": 2, "date": "2020-06-07 09:30:00", "fdate":"7 Jun", "soldout": true }, { "id": 3, "date": "2020-06-07 17:00:00", "fdate":"7 Jun",

我有一个json数组,其中包含ID、datetimes和soldout属性,如下所示:

[
    {
        "id": 2,
        "date": "2020-06-07 09:30:00",
        "fdate":"7 Jun",
        "soldout": true
    },
    {
        "id": 3,
        "date": "2020-06-07 17:00:00",
        "fdate":"7 Jun",
        "soldout": false
    },
    {
        "id": 4,
        "date": "2020-06-08 10:00:00",
        "fdate":"8 Jun",
        "soldout": false
    },
    {
        "id": 5,
        "date": "2020-06-08 18:30:00",
        "fdate":"8 Jun",
        "soldout": true
    }
]
我很难想出办法来解决这个问题。 我想对同一日期的时间、id和soldout属性进行分组。 如何在PHP中将上面的json数组转换为下面的json格式:-

[
    {
        "date":"2020-06-07",
        "fdate": "7 Jun",
        "times": [
            {
                "id":2,
                "time": "9:30 am",
                "soldout: true
            },
            {
                "id":3,
                "time": "5:00 pm",
                "soldout": false
            }
        ]
    },
    {
        "date":"2020-06-08",
        "fdate": "8 Jun",
        "times": [
            {
                "id":4,
                "time": "10:00 am",
                "soldout": false
            },
            {
                "id":5,
                "time": "6:30 pm",
                "soldout": true
            }
        ]
    }
]
你可以在这里找到我的代码:

试试看

    $out = [];
    foreach($x as $x)
    {
        $date = strtotime($x['date']);
        $day = date('Y-m-d',$date);
        $time = date('h:i a', $date);
        if(!array_key_exists($x['fdate'],$out))
        {
            $out[$x['fdate']] = [
                'fdate' => $x['fdate'],
                'date'  => $day,
            ];
            $out[$x['fdate']]['times'][] = [
                'id' => $x['id'],
                'time'  => $time,
                'soldout' => $x['soldout']
            ];
        }
        else
        {
            $out[$x['fdate']]['times'][] = [
                'id' => $x['id'],
                'time'  => $time,
                'soldout' => $x['soldout']
            ];
        }
    }
    $res=[];
    foreach($out as $out)
    {
        $res[] = $out;
    }
    dd(json_encode($res));
输出将是

[
    {
        "date":"2020-06-07",
        "fdate": "7 Jun",
        "times": [
            {
                "id":2,
                "time": "9:30 am",
                "soldout": true
            },
            {
                "id":3,
                "time": "5:00 pm",
                "soldout": false
            }
        ]
    },
    {
        "date":"2020-06-08",
        "fdate": "8 Jun",
        "times": [
            {
                "id":4,
                "time": "10:00 am",
                "soldout": false
            },
            {
                "id":5,
                "time": "6:30 pm",
                "soldout": true
            }
        ]
    }
]

感谢@Jithesh Jose提供的解决方案。我对他的解决方案做了一些更改,包括json输入的源代码,并确保它可以在在线编辑器上运行。 代码如下:-

<?php

$json = '[{
        "id": 2,
        "date": "2020-06-07 09:30:00",
        "fdate": "7 Jun",
        "soldout": true
    },
    {
        "id": 3,
        "date": "2020-06-07 17:00:00",
        "fdate": "7 Jun",
        "soldout": false
    },
    {
        "id": 4,
        "date": "2020-06-08 10:00:00",
        "fdate": "8 Jun",
        "soldout": false
    },
    {
        "id": 5,
        "date": "2020-06-08 18:30:00",
        "fdate": "8 Jun",
        "soldout": true
    }]';
$db = json_decode($json);
$out = array();
foreach( $db as $x ){

    $date = strtotime($x->date);
    $day = date('Y-m-d',$date);
    $time = date('h:i a', $date);

    if(!array_key_exists($x->fdate,$out))
    {
      $out[$x->fdate] = [
       'fdate' => $x->fdate,
       'date'  => $day,
      ];

      $out[$x->fdate]['times'][] = [
       'id' => $x->id,
       'time'  => $time,
       'soldout' => $x->soldout
      ];     

    }else
    {
      $out[$x->fdate]['times'][] = [
       'id' => $x->id,
       'time'  => $time,
       'soldout' => $x->soldout
      ];
    }
}
$res=[];
foreach($out as $o)
{
 $res[] = $o;
}
echo json_encode($res);  
?>