Объединение массивов с одинаковым 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);
→ Ссылка