如何在PHP中按多个键对数组进行分组
我有一个PHP数组,如下所示:如何在PHP中按多个键对数组进行分组,php,Php,我有一个PHP数组,如下所示: $data = array ( array("Ticket_id" => "239248", "Order_Level_Issue" => "Database update", "Geo" => "EMEA", "Line_No" => "10", "Line_Level_Issue" => "Qty verification"), array("Ticket
$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")
);
$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") ) )
);
我想通过按多个键分组子数组来格式化$data数组。结果应如下所示:
$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")
);
$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") ) )
);
因此,我将按票证id、订单级别、地理位置分组,然后创建一个子阵列行,在其中存储所有行。最后,当我执行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\u id、Order\u Level\u 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));
如果密钥不存在,我将使用插入它。
我使用重置数组
这个代码<代码> LynInNO./Case>可能是混乱的,考虑使用< /P>数据来自数据库吗?如果这样,考虑在查询之前分组。php@DevTN我编辑了我的答案,让我知道它是否能帮助你。非常感谢。正是我需要的。