我在PHP中有一个数组,如下所示:
$data = array
(
array("Ticket_id" => "239248",
"Order_Level_Issue" => "Database update",
"Geo" => "EMEA",
"Line_No" => "10",
"Line_Level_Issue" => "Qty verification"),
array("Ticket_id" => "239248",
"Order_Level_Issue" => "Database update",
"Geo" => "EMEA",
"Line_No" => "20",
"Line_Level_Issue" => "Payment verification"),
array("Ticket_id" => "239249",
"Order_Level_Issue" => "Shipping company",
"Geo" => "EMEA",
"Line_No" => "20",
"Line_Level_Issue" => "Missing address")
);
我想通过多个键将子数组分组来格式化$ data数组。结果应该如下:
$dataGrouped = array
(
array("Ticket_id" => "239248",
"Order_Level_Issue" => "Database update",
"Geo" => "EMEA",
"Lines" => (
array(
"Line_No" => "10",
"Line_Level_Issue" => "Qty verification"),
array(
"Line_No" => "20",
"Line_Level_Issue" => "Payment verification") ) ),
array("Ticket_id" => "239249",
"Order_Level_Issue" => "Shipping company",
"Geo" => "EMEA",
"Lines" => (
array(
"Line_No" => "20",
"Line_Level_Issue" => "Missing address") ) )
);
因此,我将按Ticket_id,Order_Level_Issue,Geo进行分组,然后创建一个子数组Lines,在其中存储所有行。最后,echo json_encode($dataGrouped);
我会得到这种格式
"data": [
{
"Ticket_id": "239248",
"Order_Level_Issue": "Database update",
"Geo": "EMEA",
"Items": [
{"Line_No": "10",
"Line_Level_Issue": "Qty verification"},
{"Line_No": "20",
"Line_Level_Issue": "Payment verification"} ]
},
{
"Ticket_id": "239249",
"Order_Level_Issue": "Shipping company",
"Geo": "EMEA",
"Items": [
{"Line_No": "20",
"Line_Level_Issue": "Missing address"} ]
} ]
我所做的是,创建了一个组合钥匙。我将Ticket_id,Order_Level_Issue和Geo串联起来,对于每个键,我都尝试将其余的键分组到单独的数组中。但是我没有得到想要的结果。这是我的代码。有什么建议请我缺少什么?谢谢。
$dataGrouped = [];
foreach($data as $data_key => $d) {
$group_key = $d['Ticket_id'].'_'.$d['Order_Level_Issue'].'_'.$d['Geo'];
if(!isset($dataGrouped[$data_key]))
$dataGrouped[$data_key] = [];
$dataGrouped[$group_key][$data_key] = $d; }
echo json_encode($dataGrouped);
我写这段代码:
foreach ($data as $d) {
$group_key = $d['Ticket_id'].'_'.$d['Order_Level_Issue'].'_'.$d['Geo'];
if (!isset($dataGrouped[$group_key])) {
$dataGrouped[$group_key] = $d;
unset($dataGrouped[$group_key]["Line_No"]);
unset($dataGrouped[$group_key]["Line_Level_Issue"]);
}
$dataGrouped[$group_key]['Items'][] = array(
"Line_No" => $d['Line_No'],
"Line_Level_Issue" => $d['Line_Level_Issue']
);
}
echo json_encode(array_values($dataGrouped));
如果密钥不存在,请插入array_push
。我用重置数组array_values
。
这段代码Line_No
可能很混乱,请考虑使用ksort
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句