2016-08-02 10 views
-1

Ich versuche, eine Ranking-Funktion nur mit PHP zu entwickeln (kein MySQL), die auch doppelte Werte verarbeiten kann.PHP nur Logik für das Ranking

Beispiel, auf dem Array unten haben wir Manager und wie viele Geschäfte sie verwalten:

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

Jetzt möchte ich die Manager Rang basierend auf der Anzahl von Geschäften sie und die Menge der Manager haben, auch unter Berücksichtigung dass es mehrere Manager mit der gleichen Anzahl an Geschäften geben könnte. Beispiel Ausgabe:

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

Beachten Sie, dass die Rangfolge muss immer auf die Menge der Manager erreichen auf, in diesem Fall beachten Sie 5. Sie auch, dass, wenn wir doppelte Werte von Geschäften Quantität haben, die Manager die niedrigste (Rang auf Platz 3) statt Rang 2, als müssten sie um den zweiten Platz kämpfen.

Was wäre der beste Weg, um dies zu nähern?

Vielen Dank im Voraus.

Antwort

1

diese

$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

Sie sind willkommen Bitte versuchen Sie, diese Funktion als Schleifen schneller ist. – Mickey

+0

@dzerow, Ich habe den Code geändert, überprüfen Sie, ob es für Sie funktioniert oder nicht – Mickey