在开发一个对用户做一个排行版功能,获取某个人是第几名的时候,纠结于怎么实现效率比较高,想到了一个方法。
第一步:取出结果
根据条件把所有符合条件的数据取出来,并进行排序。例如我是根据积分排序
select * from user order by points desc;
执行类似于上述SQL语句,获取结果。
第二步:获取排名
上述结果我们取出后,肯定是一个已经符合排序条件的二维数组(例如:$lists)。建议数组键名,最好是索引数组,好直接获取排名,可使用array_values()
函数处理。
我们想要的是获取某一个人的排名。
第一种实现
根据传统思路,便利结果,获取排名
/**
* code .....
*/
$user_id = 10;
$rank = 0;
foreach ($lists as $key => $value) {
if ($value['user_id'] == $user_id) {
$rank = $key+1;
}
break;
}
//用户id为10的排名
$rank;
/**
* code .....
*/
这种实现方式,比较传统,效率并不高。
第二种实现
PHP>=5.5
通过函数array_column()
,array_search()
实现。
首先通过array_column()
,获取到所有用户的user_id
数组(一维数组),这个数组跟$lists
的顺序是一样的,也就是说也是经过排名的.
然后,我们只要获取用户id的key就可以了
$uid = array_column($lists,'user_id');
$rank = array_search($user_id, $uid);
$rank ++;
两种方式都可以达到效果。
还有其它更高效的实现,有待学习研究。。