如何在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

我有一个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")

  );
$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我编辑了我的答案,让我知道它是否能帮助你。非常感谢。正是我需要的。