如何在 PHP 中对数组的索引进行排名
how to rank array's index in PHP
我需要在我的系统中排名。我有一个数组 $arr = array(120,26,38,96,22);
。我需要在不改变它们位置的情况下对索引进行排名。
我需要的输出是这样的:
120 is rank 1, 26 is rank 4, 38 is rank 3, 96 is rank 2, 22 is rank 5
我已经试过了,但都排在第 1 位:
<?php
$arr = array(120,26,38,96,22);
$rank = 0;
$score=false;
$rows = 0;
foreach($arr as $sort){
$rows++;
if($score != $arr){
$score = $arr;
$rank = $rows;
}echo $sort.' is rank '.$rank.'</br>';
}
?>
而且我还需要数组长度是动态的。
这是一种方法:
$arr = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);
foreach($arr as $sort) {
echo $sort. ' is rank ' . (array_search($sort, $rank) + 1) . '</br>';
}
- 将原始数组复制为
$rank
并反向排序,这样键的排名将为 -1
- 循环原始数组并在
$rank
中搜索该值返回键(排名)
- 加 1,因为键从 0 开始
或者另一种可能性:
$arr = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);
$rank = array_flip($rank);
foreach($arr as $sort) {
echo $sort . ' is rank '. ($rank[$sort] + 1) . '</br>';
}
- 将原始数组复制为
$rank
并反向排序,这样键的排名将为 -1
- 翻转
$rank
数组以获取值作为键并作为值排名
- 循环原数组,取值作为
$rank
键,得到rank
- 加 1,因为键从 0 开始
这样做:
$arr=array(120,26,38,96,22);
//get a copy adn use original for original order
$result=$arr;
//sort it numeric and reverse
rsort($result,SORT_NUMERIC);
//create the result
$result = array_map(function($a){return $a+1;},array_flip($result));
//print it
print_r($result);
结果:
Array ( [120] => 1 [96] => 2 [38] => 3 [26] => 4 [22] => 5 )
获取原始订单:
$resultxt = array();
foreach($arr as $sort){
$resulttxt[] = $sort.' is rank '.$result[$sort];
}
print implode(', ',$resulttxt).'<br>';
我需要在我的系统中排名。我有一个数组 $arr = array(120,26,38,96,22);
。我需要在不改变它们位置的情况下对索引进行排名。
我需要的输出是这样的:
120 is rank 1, 26 is rank 4, 38 is rank 3, 96 is rank 2, 22 is rank 5
我已经试过了,但都排在第 1 位:
<?php
$arr = array(120,26,38,96,22);
$rank = 0;
$score=false;
$rows = 0;
foreach($arr as $sort){
$rows++;
if($score != $arr){
$score = $arr;
$rank = $rows;
}echo $sort.' is rank '.$rank.'</br>';
}
?>
而且我还需要数组长度是动态的。
这是一种方法:
$arr = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);
foreach($arr as $sort) {
echo $sort. ' is rank ' . (array_search($sort, $rank) + 1) . '</br>';
}
- 将原始数组复制为
$rank
并反向排序,这样键的排名将为 -1 - 循环原始数组并在
$rank
中搜索该值返回键(排名) - 加 1,因为键从 0 开始
或者另一种可能性:
$arr = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);
$rank = array_flip($rank);
foreach($arr as $sort) {
echo $sort . ' is rank '. ($rank[$sort] + 1) . '</br>';
}
- 将原始数组复制为
$rank
并反向排序,这样键的排名将为 -1 - 翻转
$rank
数组以获取值作为键并作为值排名 - 循环原数组,取值作为
$rank
键,得到rank - 加 1,因为键从 0 开始
这样做:
$arr=array(120,26,38,96,22);
//get a copy adn use original for original order
$result=$arr;
//sort it numeric and reverse
rsort($result,SORT_NUMERIC);
//create the result
$result = array_map(function($a){return $a+1;},array_flip($result));
//print it
print_r($result);
结果:
Array ( [120] => 1 [96] => 2 [38] => 3 [26] => 4 [22] => 5 )
获取原始订单:
$resultxt = array();
foreach($arr as $sort){
$resulttxt[] = $sort.' is rank '.$result[$sort];
}
print implode(', ',$resulttxt).'<br>';