Объединение массивов с одинаковым id
Есть массив:
array (size=4)
0 =>
array (size=4)
'id' => int 9999010001699
'county' => string 'default' (length=7)
'result' => boolean false
'msg' => string 'Product doesn't exists' (length=22)
1 =>
array (size=4)
'id' => int 99990100016
'county' => string 'default' (length=7)
'result' => boolean true
'msg' => string '' (length=0)
2 =>
array (size=4)
'id' => int 99990100016
'county' => string 'nov' (length=5)
'result' => boolean true
'msg' => string '' (length=0)
Нужно соединить некоторые элементы, одинаковые по id. Как правильно отфильтровать массив чтобы получилось так:
array (size=4)
0 =>
array (size=4)
'id' => int 9999010001699
'county' => string 'default' (length=7)
'result' => boolean false
'msg' => string 'Product doesn't exists' (length=22)
1 =>
array (size=4)
'id' => int 99990100016
'county' => array (size = 2)
0 => 'default' (length=7)
1 => 'nov' (lenght=3)
'result' => boolean true
'msg' => string '' (length=0)
Ответы (1 шт):
Автор решения: Denis640Kb
→ Ссылка
Если необходимо объединять только county, как написано в примере, то можно так:
<?php
$Arr = array (
array (
'id' => 9999010001699,
'county' => 'default',
'result' => false,
'msg' => 'Product doesn\'t exists'
),
array (
'id' => 99990100016,
'county' => 'default',
'result' => true,
'msg' => ''
),
array (
'id' => 99990100016,
'county' => 'nov',
'result' => true,
'msg' => ''
)
);
$Result = [];
foreach ($Arr as $item){
$tempArr = [];
if($Result) {
$trig = 0;
foreach ($Result as $key => $item1) {
if (in_array($item['id'], $item1)) {
$trig = 0;
$tempArr[] = $item1['county'];
$tempArr[] = $item['county'];
$Result[$key]['county'] = $tempArr;
} else {
$trig = 1;
}
}
if($trig == 1){
$Result[] = $item;
}
} else {
$Result[] = $item;
}
}
print_r($Result);
Если необходимо объединять всё кроме id:
<?php
$Arr = array (
array (
'id' => 9999010001699,
'county' => 'default',
'result' => false,
'msg' => 'Product doesn\'t exists'
),
array (
'id' => 99990100016,
'county' => 'default',
'result' => true,
'msg' => ''
),
array (
'id' => 99990100016,
'county' => 'nov',
'result' => true,
'msg' => ''
)
);
$Result = [];
foreach ($Arr as $item){
if($Result) {
$trig = 0;
foreach ($Result as $key => $item1) {
if (in_array($item['id'], $item1)) {
$tempArr = [];
$trig = 0;
$tempArr[] = $item1['county'];
$tempArr[] = $item['county'];
$Result[$key]['county'] = $tempArr;
$tempArr = [];
$tempArr[] = $item1['result'];
$tempArr[] = $item['result'];
$Result[$key]['result'] = $tempArr;
$tempArr = [];
$tempArr[] = $item1['msg'];
$tempArr[] = $item['msg'];
$Result[$key]['msg'] = $tempArr;
} else {
$trig = 1;
}
}
if($trig == 1){
$Result[] = $item;
}
} else {
$Result[] = $item;
}
}
print_r($Result);