我正在尝试使用PHP开发一个排名函数(没有MySQL),它也可以处理重复值。
示例,在下面的数组中,我们有经理和他们管理的商店数量:
$manag = array(
[0] => array(
'manager' => 'David',
'stores' => '20'
),
[1] => array(
'manager' => 'John',
'stores' => '12'
),
[2] => array(
'manager' => 'Tony',
'stores' => '37'
),
[3] => array(
'manager' => 'Batman',
'stores' => '49'
),
[4] => array(
'manager' => 'Barbie',
'stores' => '37'
)
);
现在我想根据他们拥有的商店数量和经理人数量对经理人进行排名,同时考虑到可能有多个经理人拥有相同数量的商店。示例输出:
array(
['Batman'] => 1,
['Tony'] => 3,
['Barbie'] => 3,
['David'] => 4,
['John'] => 5
);
请注意,排名必须始终达到管理者的数量,在这种情况下,5。还要注意,当我们有重复的商店数量值时,管理者排名最低(排名3)而不是排名2,如如果他们必须争取第二名。
最好的方法是什么?
提前致谢。
答案 0 :(得分:1)
请试试这个
$jitendra = array();
foreach ($manag as $key => $row)
{
$jitendra[$key] = $row['stores'];
}
array_multisort($jitendra, SORT_DESC, $manag);
答案 1 :(得分:1)
function sort_managers($a,$b){
if($a['stores'] == $b['stores'])
return 0;
return ($a['stores']>$b['stores'])? -1:1;
}
usort($manag,'sort_managers');
function place_rank(&$item,$key,$stores){
$item['rank'] = count($stores) - array_search($item['stores'],array_reverse($stores)) - 1;
}
$stores = array_column($manag,'stores');
array_walk($manag, 'place_rank',$stores);