一些项目中会出现这种情况,在用户充值后进行排名(所谓的土豪榜,直播平台常见)。从数据库查出的是一个二维数组,要根据充值数量的大小且用户标识(uid)不能去除。一般的算法也就是给一个简单的一维数组进行大小比较从而进行排序。想保留用户标识是很难的。这里告诉大家一个方法可以实现通过数量大小给排名且保留用户标识。
我们首先模仿从数据库里查出的数组
$data[] = array('id'=>1, 'num'=>10,'wow' =>456);
$data[] = array('id'=>2, 'num'=>15,'wow' =>46);
$data[] = array('id'=>3, 'num'=>14,'wow' =>56);
$data[] = array('id'=>4, 'num'=>15,'wow' =>45);
$data[] = array('id'=>5, 'num'=>13,'wow' =>4);
$data[] = array('id'=>6, 'num'=>12,'wow' =>68);
$data[] = array('id'=>7, 'num'=>16,'wow' =>1);
不要在乎字段为什么是wow 因为我是打魔兽的。这里通过给num进行排序 且继续保留对应ID。
成功后的样子应该是这样
$data[] = array('id'=>7, 'num'=>16,'wow' =>1);
$data[] = array('id'=>2, 'num'=>15,'wow' =>46);
$data[] = array('id'=>4, 'num'=>15,'wow' =>45);
$data[] = array('id'=>3, 'num'=>14,'wow' =>56);
$data[] = array('id'=>5, 'num'=>13,'wow' =>4);
$data[] = array('id'=>6, 'num'=>12,'wow' =>68);
$data[] = array('id'=>1, 'num'=>10,'wow' =>456);
好下面开始代码示例
上面已经有了数组 这里直接对数组进行操作
给数组进行循环,重组数据(为了给下面的方法传参不报错)
foreach ($data as $k => $v) {
$num[$k] = $v['num'];
}
接下来这个方法很关键(核心)
array_multisort() 默认参数有 SORT_ASC(按照上升顺序排序) SORT_REGULAR(将项目按照通常方法比较)
接下来传参然后输出数据看结果
array_multisort($num,SORT_DESC,$data,默认参数可不填写);
var_dump($data);
你就可以看到上述的排序