Как объединить значения массива с одинаковым ключом

возникла такая проблема, получаю массив после запроса в дб вида:

Array
(
    [0] => Array
        (
            [id] => 14
            [name] => 2222
            [secondname] => 2222
            [midname] => 2222
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 222
            [official_salary] => 222
            [DoB] => 2021-10-14
            [salary] => 222
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 186
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => nal
            [id_komy] => 14
            [name_edit] => 1
            [value_accrued_nal] => 12000
            [value_accrued_beznal] => 
        )

    [1] => Array
        (
            [id] => 14
            [name] => 2222
            [secondname] => 2222
            [midname] => 2222
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 222
            [official_salary] => 222
            [DoB] => 2021-10-14
            [salary] => 222
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 193
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => beznal
            [id_komy] => 14
            [name_edit] => 1
            [value_accrued_beznal] => 40000
            [value_accrued_nal] => 
        )

    [2] => Array
        (
            [id] => 11
            [name] => qwe
            [secondname] => qwe
            [midname] => qwe
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 231
            [official_salary] => 1231
            [DoB] => 2010-11-11
            [salary] => 12314
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 187
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => nal
            [id_komy] => 11
            [name_edit] => 1
            [value_accrued_nal] => 12000
            [value_accrued_beznal] => 
        )

    [3] => Array
        (
            [id] => 11
            [name] => qwe
            [secondname] => qwe
            [midname] => qwe
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 231
            [official_salary] => 1231
            [DoB] => 2010-11-11
            [salary] => 12314
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 192
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => beznal
            [id_komy] => 11
            [name_edit] => 1
            [value_accrued_beznal] => 40000
            [value_accrued_nal] => 
        )
)

Если внимательно рассмотреть массив, то можно увидеть что некоторые значения повторяются, и у них почти все данные идентичны, но есть одно отличие, поле [value_accrued] => , у него может быть только два значения nal, beznal, как мне получить вид массива:

Array
(
    [0] => Array
        (
            [id] => 14
            [name] => 2222
            [secondname] => 2222
            [midname] => 2222
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 222
            [official_salary] => 222
            [DoB] => 2021-10-14
            [salary] => 222
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 186
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => nal, beznal
            [id_komy] => 14
            [name_edit] => 1
            [value_accrued_nal] => 12000
            [value_accrued_beznal] => 40000
        )

    [1] => Array
        (
            [id] => 11
            [name] => qwe
            [secondname] => qwe
            [midname] => qwe
            [username] => 
            [email] => 
            [gender] => М
            [ihr] => 231
            [official_salary] => 1231
            [DoB] => 2010-11-11
            [salary] => 12314
            [id_spec] => 4
            [OE] => Нет
            [Fired] => 
            [phone] => +7(999) 999-99-99
            [isb] => Нет
            [id_status] => 
            [work_shift] => 0
            [id_extradition] => 187
            [date_time] => 2021-11-08 00:00:00
            [data_create] => 2021-11-08
            [value] => 12
            [value_accrued] => nal, beznal
            [id_komy] => 11
            [name_edit] => 1
            [value_accrued_nal] => 12000
            [value_accrued_beznal] => 40000
        )
)

Все перепробовал, не чего не выходит.


Ответы (1 шт):

Автор решения: teran

есть у вас в массиве поле id, вероятно, выступающее в роли некоего идентификатора, по нему и надо группировать.
Идете по массиву, перекидываете элементы в новый массив, используя этот id как ключ. Если ключ в массиве уже есть, то добавляете искомое поле.

получите нечто вроде такого

$result = [];
foreach($data as $d){
    $id = $d['id'];
    if(!isset($result[$id])){
        $result[$id] = $d;
        $result[$id]['value_accrued'] = [ $d['value_accrued'] ];
    }
    else{
        $result[$id]['value_accrued'][] = $d['value_accrued'];
    }
} 
→ Ссылка