2017-01-12 5 views
2

Мне нужен ранг в моей системе. У меня есть массив $arr = array(120,26,38,96,22);. Мне нужно ранжировать индекс внутри, не меняя свою позицию.Как оценивать индекс массива в PHP

Выход мне нужно что-то вроде:

120 ранга 1, 26 Оценка 4, 38 Оценка 3, 96 ранга 2, 22 Оценка 5

I» ve оценил это как рейтинг 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>'; 
} 
?> 

А также мне нужна длина массива, чтобы быть динамичной.

+0

Какая у вас логика 'rank'? – JustOnUnderMillions

+0

Я бы сделал это, создав вторую копию $ arr массива, затем отсортировав ее, а затем найдите индекс # в отсортированном массиве для каждого значения в несортированном массиве. Вероятно, десятки способов сделать это см. Http: // php. net/manual/en/ref.array.php –

+0

Если все позиции уникальны, выполните следующие действия: 'sort ($ arr); $ result = array_map (функция ($ a) {return $ a + 1;}, array_flip ($ arr)); ' – JustOnUnderMillions

ответ

1

Вот один из способов:

$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>'; 
} 
  • Скопируйте исходный массив в качестве $rank и сортировки в обратном, так что ключи будут ранг -1
  • Loop исходный массив и поиск этого значения в $rank возвращая ключ (ранг)
  • Добавить 1, так как ключи начинаются с 0

Или anot ее возможности:

$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>'; 
} 
  • Скопируйте исходный массив в $rank и сортировать в обратном, так что ключи будут ранг -1
  • Флип $rank массив, чтобы получить значения в качестве ключей и ранга в качестве значений
  • Петля исходный массив и использовать значение в качестве ключа $rank, чтобы получить звание
  • Добавить 1, так как ключи начинаются с 0
+0

так просто и работает! Большое вам спасибо за ответ и объяснение <3 –

1

Делают это так:

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

Результат:

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

Оригинальное заказ:

$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

За исключением того, что они хотят, чтобы исходные значения массивов были напечатаны в первоначальном порядке '120,26,38,96,22'. – AbraCadaver

+0

@AbraCadaver обновленный – JustOnUnderMillions

+0

Большое вам спасибо за то, что дал мне ответ, он также работает. <3 –

Смежные вопросы