$marks = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
rank($marks);
必须导致:
92 - 1
84 - 2
84 - 2
84 - 2
83 - 3
65 - 4
41 - 5
38 - 6
38 - 6
37 - 7
我只能得到:
92 - 1
84 - 2
84 - 2
84 - 2
83 - 5
65 - 6
41 - 7
38 - 8
38 - 8
37 - 10
从代码中可以看出:
function _get_rank($arr, $key, $val){
$i = 1;
foreach ($arr as $v){
if($v[''.$key.''] == $val){
return $i;
}
$i++;
}
}
以上函数适用于我的实际情况,其中数组由具有某些 $ key 的对象组成,并且 $ val 是该值。
例如: _get_rank($marks, 'marks', 83)
必须返回3而不是5。
答案 0 :(得分:0)
<?php
function rank ($arr) {
$ret = array();
$s = array();
$i = 0;
foreach ($arr as $v) {
if (!$s[$v]) { $s[$v] = ++$i; }
$ret[]= array($v, $s[$v]);
}
return $ret;
}
$marks = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
$rank = rank($marks);
print_r($rank);
输出
Array
(
[0] => Array
(
[0] => 92
[1] => 1
)
[1] => Array
(
[0] => 84
[1] => 2
)
[2] => Array
(
[0] => 84
[1] => 2
)
[3] => Array
(
[0] => 84
[1] => 2
)
[4] => Array
(
[0] => 83
[1] => 3
)
[5] => Array
(
[0] => 65
[1] => 4
)
[6] => Array
(
[0] => 41
[1] => 5
)
[7] => Array
(
[0] => 38
[1] => 6
)
[8] => Array
(
[0] => 38
[1] => 6
)
[9] => Array
(
[0] => 37
[1] => 7
)
)
答案 1 :(得分:0)
但是你可以做一个 echo
<?php
$marks = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
rsort($marks);
$narr = array_count_values($marks);
$y=1;
foreach($narr as $k=>$v)
{
$i=1;
while($i<=$v)
{
echo "$k : $y<br>";
$i++;
}
$y++;
}
<强> OUTPUT :
强>
92 : 1
84 : 2
84 : 2
84 : 2
83 : 3
65 : 4
41 : 5
38 : 6
38 : 6
37 : 7
答案 2 :(得分:0)
这是另一个选项,它返回一个包含两个子数组的数组,一个包含数据,另一个包含排名。
$final_array = false;
$marks = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
$final_array = rank( $marks );
function rank( $array ) {
// initialize variables
$position_array = array();
$copy_array = array();
$final_array = array();
$pos = 1;
// reverse the array
rsort( $array );
// create copy to use on foreach
$copy_array = $array;
// iterate to generate ranking array
foreach ( $copy_array as $claves => $valores ) {
$position_array[] = $pos;
unset( $copy_array[$claves] );
if ( (bool)array_search( $valores, $copy_array, true ) !== false ) {
// not much here for now.
} else {
$pos++;
}
}
unset ( $claves, $valores );
// create an array with values an position
$final_array['data'] = $array;
$final_array['ranking'] = $position_array;
// clean up
unset( $position_array, $copy_array );
return $final_array;
}
// var_dump( $marks );
// var_dump( $final_array );
使用您的数据
array (size=2)
'data' =>
array (size=10)
0 => int 92
1 => int 84
2 => int 84
3 => int 84
4 => int 83
5 => int 65
6 => int 41
7 => int 38
8 => int 38
9 => int 37
'ranking' =>
array (size=10)
0 => int 1
1 => int 2
2 => int 2
3 => int 2
4 => int 3
5 => int 4
6 => int 5
7 => int 6
8 => int 6
9 => int 7