2015-08-12 2 views
0

У меня есть массив $rows, который выглядит следующим образом:Петля через массив и удаление дубликатов PHP

Array 
(
    [0] => Array 
     (
      [type] => post 
      [object_id] => 1 
      [language_id] => 1 
      [score] => 2 
     ) 

    [1] => Array 
     (
      [type] => category 
      [object_id] => 46 
      [language_id] => 1 
      [score] => 1 
     ) 

    [2] => Array 
     (
      [type] => product 
      [object_id] => 50 
      [language_id] => 1 
      [score] => 1 
     ) 

    [3] => Array 
     (
      [type] => category 
      [object_id] => 59 
      [language_id] => 1 
      [score] => 1 
     ) 
    [4] => Array 
     (
      [type] => post 
      [object_id] => 1 
      [language_id] => 1 
      [score] => 1 
     ) 
) 

мне нужно перебрать этот массив и когда дублирующие type и object_id матчи, увеличиваем счет и удалить дублирующий массив. Кажется, я не могу найти способ сделать это.

Используя пример выше, клавиша 0 имеет typepost и object_id1, и так же ключ 4. Ключ 0 score должен быть увеличен на себя + клавиша и ключ 4 следует исключить.

Мой конечный результат должен выглядеть следующим образом:

Array 
(
    [0] => Array 
     (
      [type] => post 
      [object_id] => 1 
      [language_id] => 1 
      [score] => 3 
     ) 

    [1] => Array 
     (
      [type] => category 
      [object_id] => 46 
      [language_id] => 1 
      [score] => 1 
     ) 

    [2] => Array 
     (
      [type] => product 
      [object_id] => 50 
      [language_id] => 1 
      [score] => 1 
     ) 

    [3] => Array 
     (
      [type] => category 
      [object_id] => 59 
      [language_id] => 1 
      [score] => 1 
     ) 
) 
+1

Разместить свои попытки наряду с ожидаемым выходом –

+1

Просто переписать новый чтобы объединить массив с самим собой. –

+0

Попробуйте array_values ​​(array_unique ($ array)) – Stanimir

ответ

1

Вы можете добиться того, что просто используя foreach как

$result = []; 

foreach ($arr as $key => $value) { 
    $hash = $value['type']; 
    $hash1 = $value['object_id']; 
    if (isset($result[$hash.$hash1]['type']) && isset($result[$hash.$hash1]['object_id'])) { 
     $result[$hash.$hash1]['type'] = $value['type']; 
     $result[$hash.$hash1]['object_id'] = $value['object_id']; 
     $result[$hash.$hash1]['language_id'] = $value['language_id']; 
     $result[$hash.$hash1]['score'] += $value['score']; 
    } else { 
     $result[$hash.$hash1]['type'] = $value['type']; 
     $result[$hash.$hash1]['object_id'] = $value['object_id']; 
     $result[$hash.$hash1]['language_id'] = $value['language_id']; 
     $result[$hash.$hash1]['score'] = $value['score']; 
    } 
} 

print_r(array_values($result)); 

Demo

+1

Отлично, мне пришлось сделать дополнительный 'array_multisort' и настроить мой начальный счет для новых элементов в массиве, но в целом, отлично. Спасибо! –

+0

Добро пожаловать. Рад, что это тебе помогло .. –

Смежные вопросы