【问题标题】:Remove duplicate values from a multidimensional array based on a specific key基于特定键从多维数组中删除重复值
【发布时间】:2017-05-19 03:58:44
【问题描述】:

得到一个像这样的多维数组:

[['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 查询来做到这一点?

【问题讨论】:

  • 你是怎么知道['key'=>'foo', 'Rating'=>5] , 是重复的,需要删除。查看您想要的输出并告诉
  • 您还应该发布从 MySQL 获取数据的部分,并发布带有数据的表结构,因为您的问题被标记为 MySQL.... 最好的解决方案是让数据库处理分组和最大值是这样的... SELECT Rates.key , MAX(Rates.Rating) FROM Rates GROUP BY Rates.key

标签: php mysql arrays multidimensional-array


【解决方案1】:

正如 cmets 中的 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);

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多