2017-01-12 1 views
2

J'ai besoin de rang dans mon système. J'ai un tableau $arr = array(120,26,38,96,22);. J'ai besoin de classer l'index à l'intérieur sans changer de position.comment classer l'index de tableau en PHP

La sortie I besoin est quelque chose comme:

120 est de rang 1, 26 est de rang 4, 38 est de rang 3, 96 est de rang 2, la figure 22 est rang 5

I » J'ai essayé ceci, mais tous classés comme rang 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>'; 
} 
?> 

Et aussi j'ai besoin que la longueur de tableau soit dynamique.

+0

Quel genre de logique 'rank' avez-vous? – JustOnUnderMillions

+0

Je le ferais en créant une deuxième copie du tableau $ arr puis le trier, puis trouver l'index # dans le tableau trié pour chaque valeur dans le tableau non trié .. Des dizaines de façons possibles de le faire voir http: // php. net/manual/fr/ref.array.php –

+0

Si toutes les positions sont uniques, faites: 'sort ($ arr); $ result = array_map (fonction ($ a) {return $ a + 1;}, array_flip ($ arr)); ' – JustOnUnderMillions

Répondre

1

est ici une façon:

$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>'; 
} 
  • Copiez le tableau original comme $rank et le tri inverse afin que les clés seront rang -1
  • boucle le tableau original et la recherche de cette valeur dans $rank retourner la clé (rang)
  • Ajouter 1 depuis les touches commencent à 0

Ou anot la possibilité:

$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>'; 
} 
  • Copiez le tableau original comme $rank et inverser le tri en sorte que les clés seront rang -1
  • Retournez le tableau $rank pour obtenir des valeurs comme clés et rang des valeurs
  • Enroulez le tableau original et utiliser la valeur comme la clé $rank pour obtenir le rang
  • Ajouter 1 depuis clés commencent à 0
+0

c'est si simple et ça marche! merci beaucoup pour la réponse et l'explication <3 –

1

faire comme ceci:

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

Résultat:

Array ([120] => 1 [96] => 2 [38] => 3 [26] => 4 [22] => 5) 

Get ordre original:

$resultxt = array(); 
foreach($arr as $sort){ 
    $resulttxt[] = $sort.' is rank '.$result[$sort]; 
} 
print implode(', ',$resulttxt).'<br>'; 

array_map http://php.net/manual/en/function.array-map.php

array_flip http://php.net/manual/en/function.array-flip.php

+0

Sauf qu'ils veulent les valeurs de tableau d'origine imprimées dans l'ordre original '120,26,38,96,22'. – AbraCadaver

+0

@AbraCadaver mis à jour – JustOnUnderMillions

+0

merci beaucoup de me donner une réponse ça marche aussi .. <3 –