Как объединить значения массива с одинаковым ключом
возникла такая проблема, получаю массив после запроса в дб вида:
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'];
}
}