Jho*_*val 3 php arrays grouping json
我正在考虑如何通过具有相同值的对象对数组进行分组.
我从MySQL查询得到这个结果:
Date StartTime EndTime
2014-12-01 08:00 12:00
2014-12-01 10:00 16:00
2014-12-02 12:00 18:00
2014-12-03 10:00 20:00
Run Code Online (Sandbox Code Playgroud)
我把这个数据放在一个名为的PHP变量中$Data.
有可能用php获取这样的json数组:?
[
{
"2014-12-01": [
{
"StartTime": "08:00",
"EndTime": "12:00"
},
{
"StartTime": "10:00",
"EndTime": "16:00"
}
]
},
{
"2014-12-02": [
{
"StartTime": "12:00",
"EndTime": "18:00"
}
]
},
{
"2014-12-03": [
{
"StartTime": "10:00",
"EndTime": "20:00"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
如果我使用echo json_encode($Data),结果是:
[
{
"Date": "2014-12-01",
"StartTime": "10:00",
"EndTime": "16:00"
},
{
"Date": "2014-12-02",
"StartTime": "12:00",
"EndTime": "18:00"
},
{
"Date": "2014-12-03",
"StartTime": "10:00",
"EndTime": "20:00"
}
]
Run Code Online (Sandbox Code Playgroud)
根据问题中概述的结构:
需要php 5.4+用于json漂亮打印,如果你使用较低版本只需删除它并使用长数组格式.
$in = <<<'JSON'
[
{
"Date": "2014-12-01",
"StartTime": "10:00",
"EndTime": "16:00"
},
{
"Date": "2014-12-02",
"StartTime": "12:00",
"EndTime": "18:00"
},
{
"Date": "2014-12-03",
"StartTime": "10:00",
"EndTime": "20:00"
},
{
"Date": "2014-12-03",
"StartTime": "12:00",
"EndTime": "20:00"
}
]
JSON;
$data = json_decode($in, true);
$out = [];
foreach($data as $element) {
$out[$element['Date']][] = ['StartTime' => $element['StartTime'], 'EndTime' => $element['EndTime']];
}
var_dump(json_encode($out, JSON_PRETTY_PRINT));
Run Code Online (Sandbox Code Playgroud)
要获得与问题完全相同的输出(包含在单个元素json数组中的返回输出,您需要将其包装$out在另一个数组中,如下所示:
json_encode([$out], JSON_PRETTY_PRINT)
结果是:
{
"2014-12-01": [
{
"StartTime": "10:00",
"EndTime": "16:00"
}
],
"2014-12-02": [
{
"StartTime": "12:00",
"EndTime": "18:00"
}
],
"2014-12-03": [
{
"StartTime": "10:00",
"EndTime": "20:00"
},
{
"StartTime": "12:00",
"EndTime": "20:00"
}
]
}
Run Code Online (Sandbox Code Playgroud)