Php 如何将具有相同日期但不同时间的json数组转换为另一种json数组格式,该格式将时间和id属性分组为相同日期?
我有一个json数组,其中包含ID、datetimes和soldout属性,如下所示: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",
[
{
"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);
?>