php数组排序
php数组排序已经有很多函数,但是还是没办法满足我的要求,只好自己上手了,由于匆忙,没有优化,不过好在功能实现了。
我的需求是啥呢?具体是这样的,我有一个投票排行数组,大概长得这样
$arr = array(1824 => 10, 2096 => 5, 3233 => 7, 4442 => 5, 1154 => 10, 1024 => 10, 1102 => 5);
键是投票id号,值是票数,要进行排行,我直接arsort,出来这样:
Array
(
[1824] => 10
[1154] => 10
[1024] => 10
[3233] => 7
[2096] => 5
[4442] => 5
[1102] => 5
)
票数倒是按照大小来排了,但是值相同的键是乱的。一查文档,果然是php实现的问题,还有一个stable_ursort函数,那个就不贴了,反正出来的结果不对。自己写了一个
function csort($arr){
arsort($arr);
$sortarr = array();
$sortedarr = array();
$val = 0;
$i = 1;
foreach ($arr as $a => $r) {
if($i == 1){
$sortarr[$a] = $r;
$val = $r;
}else{
if($r != $val){
if(count($sortarr) > 1){
ksort($sortarr);
$sortedarr = $sortedarr + $sortarr;
$sortarr = array();
}elseif(count($sortarr) == 1){
$sortedarr = $sortedarr + $sortarr;
$sortarr = array();
}
$sortarr[$a] = $r;
$val = $r;
}else{
$sortarr[$a] = $r;
}
}
if($i == count($arr)){
if(count($sortarr) > 1){
ksort($sortarr);
$sortedarr = $sortedarr + $sortarr;
$sortarr = array();
}elseif(count($sortarr) == 1){
$sortedarr = $sortedarr + $sortarr;
$sortarr = array();
}
}
$i++;
}
return $sortedarr;
}
输出结果终于跟我想要的一样了
Array
(
[1024] => 10
[1154] => 10
[1824] => 10
[3233] => 7
[1102] => 5
[2096] => 5
[4442] => 5
)
票数按照倒叙排行,相同票数按照序号进行正序排行。