2016-08-02 9 views
-1

私は、重複値を扱うことができるPHPのみ(MySQLはありません)でランキング機能を開発しようとしています。ランク付けのためのPHP専用ロジック

例は、我々下記のアレイ上の管理職を持っているとどのように多くの店彼らが管理する:

$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' 
    ) 
); 

は今、私はまた考えると、彼らが持っている店舗の量とマネージャーの量に基づいて経営者をランク付けしたいです同じ数の店舗を持つ複数のマネージャーがいる可能性があります。出力例:ランキングは常に5はまた、我々は、店舗量の重複した値を持っている場合、管理者が最低(ランク3位にランクことに注意してください、この場合には、管理職の量に達する必要があることを

array(
     ['Batman'] => 1, 
     ['Tony'] => 3, 
     ['Barbie'] => 3, 
     ['David'] => 4, 
     ['John'] => 5 
); 

注意)2位の代わりに、2位のために戦わなければならないかのように。

このアプローチにはどのような方法が最適でしょうか?

ありがとうございます。

答えて

1

あなたは歓迎されている。この

$jitendra = array(); 

foreach ($manag as $key => $row) 
{ 
    $jitendra[$key] = $row['stores']; 
} 
array_multisort($jitendra, SORT_DESC, $manag); 
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); 
+0

を試してみてください、この機能は、ループよりも高速です。 – Mickey

+0

@ dzerow、私はコードを変更して、それがあなたのために働くかどうかをチェックする – Mickey

関連する問題