Php 如何从多维数组中删除特定键 这就是我需要得出的结果

Php 如何从多维数组中删除特定键 这就是我需要得出的结果,php,arrays,Php,Arrays,但我得到的结果如下 { "data": [ { "ticket_category_id": "677", "ticket_category_name": " Testing 500", "ticket_category_order": "1",

但我得到的结果如下

 {
    "data": [
        {
            "ticket_category_id": "677",
            "ticket_category_name": " Testing 500",
            "ticket_category_order": "1",
            "tickets": {
                "927": {
                    "ticket_id": "927",
                    "ticket_title": "EDI Project Template with attachments",
                    "ticket_order": "1",
                    "due_date": "0000-00-00 00:00:00",
                    "created_date": "2018-05-16 10:01:04",
                    "edited_date": "2018-05-17 02:56:38",
                    "updated_date": "2018-05-17 02:56:38",
                    "is_complete": "0",
                    "total_comment": "0",
                    "total_attachment": "10",
                    "total_checklist_items": "48",
                    "total_completed_checklist_items": "0",
                    "label": {
                        "#FF3B30": {
                            "ticket_label_name": "",
                            "ticket_color_code": "#FF3B30"
                        }
                    },
                    "people": []
                }
            }
        },
        {
            "ticket_category_id": "677",
            "ticket_category_name": " Testing 500",
            "ticket_category_order": "1",
            "tickets": {
                "927": {
                    "ticket_id": "927",
                    "ticket_title": "EDI Project Template with attachments",
                    "ticket_order": "1",
                    "due_date": "0000-00-00 00:00:00",
                    "created_date": "2018-05-16 10:01:04",
                    "edited_date": "2018-05-17 02:56:38",
                    "updated_date": "2018-05-17 02:56:38",
                    "is_complete": "0",
                    "total_comment": "0",
                    "total_attachment": "10",
                    "total_checklist_items": "48",
                    "total_completed_checklist_items": "0",
                    "label": {
                        "#D4891C": {
                            "ticket_label_name": "IN PROGRESS",
                            "ticket_color_code": "#D4891C"
                        }
                    },
                    "people": []
                }
            }
        },
下面是我所做的代码,我使用php mysql一对多关系将所有数据转换为平面数组,然后下面的代码将单个平面数组转换为三维数组,但我遇到了一个瓶颈。请帮助检查我的代码,指出我需要更改哪些部分才能成为我的预期结果

  $result = array();
    foreach($total_count as $Key => $Value){
        $ticketCatId = $Value['ticket_category_id'];
        $ticketId = $Value['ticket_id'];
        $ticketColorCode = $Value['ticket_color_code'];
        $ticketMember = $Value['user_id'];
    
        $result[$ticketCatId]['ticket_category_id'] = $Value['ticket_category_id'];
        $result[$ticketCatId]['ticket_category_name'] = $Value['ticket_category_name'];
        $result[$ticketCatId]['ticket_category_order']  = $Value['ticket_category_order'];

        if(!isset($result[$ticketCatId]['tickets'])) {
            $result[$ticketCatId]['tickets'] = array();
        }

        // this code is append the ticket ID
        if($ticketId && !isset($result[$ticketCatId]['tickets'][$ticketId])) {
            $ticket = array(
                'ticket_id'                         => $Value['ticket_id'],
                'ticket_title'                      => $Value['ticket_title'],
                'ticket_order'                      => $Value['ticket_order'],
                'due_date'                          => $Value['due_date'],
                'created_date'                      => $Value['created_date'],
                'edited_date'                       => $Value['edited_date'],
                'updated_date'                      => $Value['updated_date'],
                'is_complete'                       => $Value['is_complete'],
                'total_comment'                     => $Value['total_comment'],
                'total_attachment'                  => $Value['total_attachment'],
                'total_checklist_items'             => $Value['total_checklist_items'],
                'total_completed_checklist_items'   => $Value['total_completed_checklist_items'],
                'label' => array(),
                'people' => array()
                
            );
            $result[$ticketCatId]['tickets'][$ticketId] = $ticket;
        }

        if($ticketColorCode && isset($result[$ticketCatId]['tickets'][$ticketId]) && !isset($result[$ticketCatId]['tickets'][$ticketId]['label'][$ticketColorCode])) {
            $ticketColor = array(
                'ticket_label_name' => $Value['ticket_label_name'],
                'ticket_color_code' => $Value['ticket_color_code']
            );
            $result[$ticketCatId]['tickets'][$ticketId]['label'][$ticketColorCode] = $ticketColor;
        }

        if($ticketMember && isset($result[$ticketCatId]['tickets'][$ticketId]) && !isset($result[$ticketCatId]['tickets'][$ticketId]['people'][$ticketMember])) {
            $ticketPeople = array(
                'user_id' => $Value['user_id'],
                'photo' => $Value['photo']
            );
            $result[$ticketCatId]['tickets'][$ticketId]['people'][$ticketMember] = $ticketPeople;
        }
}

    dd(json_encode(["data"=>$result]));

我没有任何样本数据可供使用,因此我无法为您实际测试。不过,一般的想法是,每次通过循环时,您都会初始化一个临时数组(
$tmpArray=array();
),并将所有特定于循环的值放入该数组中。然后,在每次循环迭代结束时,将该临时数组推送到
$results
数组(
$result[]=$tmpArray;
),允许PHP自动为
$results
创建顺序索引。当前获取嵌套JSON对象的原因是
JSON\u encode()
将仅从顺序索引PHP数组生成JSON数组

  $result = array();
    foreach($total_count as $Key => $Value){
        $ticketCatId = $Value['ticket_category_id'];
        $ticketId = $Value['ticket_id'];
        $ticketColorCode = $Value['ticket_color_code'];
        $ticketMember = $Value['user_id'];

        $tmpArray = array();

        $tmpArray['ticket_category_id'] = $Value['ticket_category_id'];
        $tmpArray['ticket_category_name'] = $Value['ticket_category_name'];
        $tmpArray['ticket_category_order']  = $Value['ticket_category_order'];

        if(!isset($tmpArray['tickets'])) {
            $tmpArray['tickets'] = array();
        }

        // this code is append the ticket ID
        if($ticketId && !isset($tmpArray['tickets'][$ticketId])) {
            $ticket = array(
                'ticket_id'                         => $Value['ticket_id'],
                'ticket_title'                      => $Value['ticket_title'],
                'ticket_order'                      => $Value['ticket_order'],
                'due_date'                          => $Value['due_date'],
                'created_date'                      => $Value['created_date'],
                'edited_date'                       => $Value['edited_date'],
                'updated_date'                      => $Value['updated_date'],
                'is_complete'                       => $Value['is_complete'],
                'total_comment'                     => $Value['total_comment'],
                'total_attachment'                  => $Value['total_attachment'],
                'total_checklist_items'             => $Value['total_checklist_items'],
                'total_completed_checklist_items'   => $Value['total_completed_checklist_items'],
                'label' => array(),
                'people' => array()

            );
            $tmpArray['tickets'][$ticketId] = $ticket;
        }

        if($ticketColorCode && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['label'][$ticketColorCode])) {
            $ticketColor = array(
                'ticket_label_name' => $Value['ticket_label_name'],
                'ticket_color_code' => $Value['ticket_color_code']
            );
            $tmpArray['tickets'][$ticketId]['label'][$ticketColorCode] = $ticketColor;
        }

        if($ticketMember && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['people'][$ticketMember])) {
            $ticketPeople = array(
                'user_id' => $Value['user_id'],
                'photo' => $Value['photo']
            );
            $tmpArray['tickets'][$ticketId]['people'][$ticketMember] = $ticketPeople;
        }

        $result[] = $tmpArray;
}

    dd(json_encode(["data"=>$result]));

允许PHP自动生成索引,而不是基于
$ticketCatId
的值指定
$result
的索引。聚合所有要添加到临时数组中的数据,然后只需执行
$result[]=$tmpArray
Hi@PatrickQ我是php数组的新手,你能给我上面描述的示例代码吗?谢谢。我已经测试了代码,它不是我想要的结果。应用代码后,按ticketid分组&ticket\u category\u id尚未工作。我无法理解您的意思。你能更新你的问题以显示新的结果吗?我已经更新了上面的结果,请看一看,票证类别id应该只出现一次,但现在正在重复,与票证id相同。等等,在
$total\u count
中是否有多行具有相同的
票证类别id
,您希望所有这些行通过
ticket\u category\u id
?@JASONWONG8合并。此外,您所说需要获取的示例不是有效的JSON。你在第一张票的第二个彩色条目上有一把钥匙(
“"D4891C:{
),那不可能在那里。
  $result = array();
    foreach($total_count as $Key => $Value){
        $ticketCatId = $Value['ticket_category_id'];
        $ticketId = $Value['ticket_id'];
        $ticketColorCode = $Value['ticket_color_code'];
        $ticketMember = $Value['user_id'];

        $tmpArray = array();

        $tmpArray['ticket_category_id'] = $Value['ticket_category_id'];
        $tmpArray['ticket_category_name'] = $Value['ticket_category_name'];
        $tmpArray['ticket_category_order']  = $Value['ticket_category_order'];

        if(!isset($tmpArray['tickets'])) {
            $tmpArray['tickets'] = array();
        }

        // this code is append the ticket ID
        if($ticketId && !isset($tmpArray['tickets'][$ticketId])) {
            $ticket = array(
                'ticket_id'                         => $Value['ticket_id'],
                'ticket_title'                      => $Value['ticket_title'],
                'ticket_order'                      => $Value['ticket_order'],
                'due_date'                          => $Value['due_date'],
                'created_date'                      => $Value['created_date'],
                'edited_date'                       => $Value['edited_date'],
                'updated_date'                      => $Value['updated_date'],
                'is_complete'                       => $Value['is_complete'],
                'total_comment'                     => $Value['total_comment'],
                'total_attachment'                  => $Value['total_attachment'],
                'total_checklist_items'             => $Value['total_checklist_items'],
                'total_completed_checklist_items'   => $Value['total_completed_checklist_items'],
                'label' => array(),
                'people' => array()

            );
            $tmpArray['tickets'][$ticketId] = $ticket;
        }

        if($ticketColorCode && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['label'][$ticketColorCode])) {
            $ticketColor = array(
                'ticket_label_name' => $Value['ticket_label_name'],
                'ticket_color_code' => $Value['ticket_color_code']
            );
            $tmpArray['tickets'][$ticketId]['label'][$ticketColorCode] = $ticketColor;
        }

        if($ticketMember && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['people'][$ticketMember])) {
            $ticketPeople = array(
                'user_id' => $Value['user_id'],
                'photo' => $Value['photo']
            );
            $tmpArray['tickets'][$ticketId]['people'][$ticketMember] = $ticketPeople;
        }

        $result[] = $tmpArray;
}

    dd(json_encode(["data"=>$result]));