Удалить повторяющиеся значения из многомерного массива на основе определенного ключа

Получил многомерный массив, подобный этому:

[['key'=>'foo', 'Rating'=>5] , ['key'=>'bar', 'Rating'=>1] , ['key'=>'Tee', 'Rating'=>3] , ['key'=>'foo', 'Rating'=>10] , ['key'=>'foo', 'Rating'=>1]] 

Я хочу удалить дубликаты на основе определенного ключа и системы рейтинга, сохраняя при этом исходную структуру массива, кроме клавиш индекса.

Итак, конечный результат должен выглядеть так:

 [['key'=>'bar', 'Rating'=>1] , ['key'=>'Tee', 'Rating'=>3] , ['key'=>'foo', 'Rating'=>10]] 

Я ищу эффективное решение этой проблемы.

В идеале функция array_unique() которая принимает значение ключа в качестве параметра для поиска повторений для заданного массива и ключа Rating .

 array_key_unique($array, $uniqe_key, $Rating); 

Мне было интересно, есть ли способ сделать это с помощью MySQL-запроса?

Как поясняет Раймонд Ниджланд в комментариях, лучше сделать это в запросе:

 SELECT `key`, MAX(`Rating`) FROM `table_name` GROUP BY `key` 

Но из-за того, что мне было скучно, зациклируйте и добавьте результат с самым высоким Rating к результату:

 foreach($array as $value) { if(!isset($result[$value['key']]) || $result[$value['key']]['Rating'] < $value['Rating']) { $result[$value['key']] = $value; } } 

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

 array_multisort(array_column($array, 'key'), array_column($array, 'Rating'), SORT_ASC, $array); $result = array_column($array, null, 'key'); 

В любом случае, чтобы повторно индексировать массив с целым числом, используйте:

 $result = array_values($result);