Получение массивом новых значений (сохраняя ключи) по определенному правилу.

ivan453

Новичок
Здравствуйте.
Есть например массив
PHP:
Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 1 [4] => 2 [5] => 5 )
или такой
PHP:
Array ( [0] => 3 [1] => 5 [2] => 2 [3] => 4 [4] => 2 [5] => 1 [6] => 4 )
размер произвольный, значение ключей от 1 до 5. ( повторение или не повторение чисел также произвольное - то есть любые от 1 до 5)

Его нужно переписать так что бы значение ключа с наибольшим значением стал равным численно размеру массива(если их несколько то все = размеру массива), а остальные значение ключей стали меньше на единицу( опять если одинаковые значения то и одинаковые у всей группы новое (одно) значение) и так далее все изменились.

На пример массив
PHP:
Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 1 [4] => 2 [5] => 5 )
Станет таким
PHP:
Array ( [0] => 5  [2] => 4 [3] => 2 [4] => 3 [1] => 6 [5] => 6 )
После сортировки( для понимания сути вопроса)
PHP:
Array (  [3] => 2 [4] => 3 [2] => 4[0] => 5 [1] => 6 [5] => 6 )
Или
PHP:
Array ( [0] => 3 [1] => 5 [2] => 2 [3] => 4 [4] => 2 [5] => 1 [6] => 4 )
Станет таким
PHP:
Array ( [0] => 5 [1] => 7 [2] => 4 [3] => 6 [4] => 4 [5] => 3 [6] => 6 )
После сортировки
PHP:
Array ( [5] => 3 [2] => 4 [4] => 4  [0] => 5 [3] => 6 [6] => 6  [1] => 7 )
Вроде бы простым кажется вопрос но ....
Какой алгоритм что похожее на сортировку ?
Толкового что то в голову не фига приходит. :(
Пока вот так, но так не работает если массив например (1, 2,2,2 ,5)
PHP:
$myArr; // искомый массив
$temp_myArr// = $myArr; // копия 
$count_myArr = count($myArr);
$max = max($myArr);
for($i=0; $i<count_myArr;$i++)
{
  if($myArr[$i]==$max)
  {
    $temp_myArr[$i]=$count_myArr; // наибольшему(или наибольшим) поменяли значение
  }
  else
  {
      for($j=0;$j<$max;$j++)
     {
         if($max-$myArr[$j]==$j)
         {
              $temp_myArr[$i]=$j;
          }
      }
  }
}
 
Сверху