2017-01-04 6 views
1

Есть многомерный массив, как этот:Удалить повторяющиеся значения из многомерного массива на основе определенного ключа

[['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-запроса?

+0

, как вы узнали, что '[ 'ключ' => 'Foo', 'Рейтинг' => 5], 'является дубликатом и его необходимо удалить. посмотрите на свой желаемый результат и скажите –

+1

, вы также должны опубликовать часть, в которой вы извлекаете данные из MySQL, а также публикуете структуру таблицы с данными, потому что ваш вопрос помечен как MySQL .... лучшим решением будет разрешение на обработку базы данных группировка и максимальное значение что-то вроде этого ... SELECT Rates.'key' , MAX (Rates.Rating) оТ Цен GROUP BY Rates.'key' –

+0

возможного дубликата [Создание многомерного массива из вложенной MySQL результата с Duplicate Values ​​(PHP)] (http://stackoverflow.com/questions/10049175/creating-multidimensional-nested-array-from-mysql-result-with-duplicate-values) – McNets

ответ

1

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

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); 
Смежные вопросы