根据特定键从多维数组中删除重复值

时间:2017-01-04 18:37:05

标签: php mysql arrays multidimensional-array

得到像这样的多维数组:

[['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查询是否有办法做到这一点?

1 个答案:

答案 0 :(得分: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);