问题描述
我正在尝试将查询的响应重新映射到数据库,并将类似项分组在一个数组中。例如,从下面的示例中。
响应:
[
"Location"=> "City 1","AptDate"=> "2020-09-16","AptTime"=> "11:00","AptLength"=> "45","AptStatus"=> "1","Operatory"=> "1 RECALL","OperatoryNum"=> "2"
],[
"Location"=> "City 2","AptTime"=> "09:00",[
"Location"=> "City 1","AptTime"=> "12:00","AptLength"-> "45","AptStatus"=>"1","OperatoryNum"=> "2"
[,
遍历结果:
$remappedData=[];
foreach ($result as $value)
{
$remappedData[] = [
'location' => $value['Location'],// And so on
];
}
}
这并没有真正满足我的需要,因为我试图根据位置对数组进行分组并在该位置上添加AppDate。像这样的东西。
{
"Location": "City 1","AptDate": ["2020-09-16","2020-09-16"],"AptTime": ["11:00","12:00"],"AptLength": ["45","45"],"AptStatus": ["1","1"],"Operatory": ["1 RECALL","1 RECALL"],"OperatoryNum": ["2","2"]
},{
"Location": "City 2","AptDate": ["2020-09-16"],"AptTime": ["09:00"],"AptLength":[ "45"],"AptStatus": ["1"],"Operatory": ["1 RECALL"],"OperatoryNum": "2"
},
解决方法
因此,根据您的情况,您希望在Location
上进行分组,并通过将所有其他属性保持在数组中进行分组。
foreach ($result as $value)
{
$remappedData[$value['Location']]['location'] = $value['Location'];
$remappedData[$value['Location']]['AptDate'][] = $value['AptDate']; // Notice we're creating an array here.
$remappedData[$value['Location']]['AptTime'][] = $value['AptTime'];
// so on all other attributes which needs to be grouped.
}
注意:这里我们将索引创建为Location
。如果我们不希望Location
作为键,我们希望将以下代码用作数组(可能用于前端)。
$temp = [];
$remappedData=[];
$intCurrentIndex = -1;
foreach ($result as $value)
{
if(isset($temp[$value['Location']])){
$oldIndex = $temp[$value['Location']];
$remappedData[$oldIndex]['AptDate'][] = $value['AptDate'];
$remappedData[$oldIndex]['AptTime'][] = $value['AptTime'];
}
else{
$temp[$value['Location']] = ++$intCurrentIndex;
$remappedData[$intCurrentIndex]['location'] = $value['Location'];
$remappedData[$intCurrentIndex]['AptDate'][] = $value['AptDate'];
$remappedData[$intCurrentIndex]['AptTime'][] = $value['AptTime'];
}
}