仅用于排序的PHP逻辑
我正在尝试开发一个仅使用PHP(无MySQL)的排名函数,它还可以处理重复值 例如,在下面的阵列中,我们有经理以及他们管理的门店数量:仅用于排序的PHP逻辑,php,ranking,Php,Ranking,我正在尝试开发一个仅使用PHP(无MySQL)的排名函数,它还可以处理重复值 例如,在下面的阵列中,我们有经理以及他们管理的门店数量: $manag = array( [0] => array( 'manager' => 'David', 'stores' => '20' ), [1] => array( 'manager' => 'John',
$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,就好像他们必须争夺第二名一样
最好的方法是什么
提前谢谢。请试试这个
$jitendra = array();
foreach ($manag as $key => $row)
{
$jitendra[$key] = $row['stores'];
}
array_multisort($jitendra, SORT_DESC, $manag);
不客气,这个函数比循环快。@dzerow,我已经修改了代码,请检查它是否适合您
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);