得到像这样的多维数组:
[['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 :(得分: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);