Задать вопрос
@navodchik131

Как отсортировать ассоциативный массив?

Добрый день. столкнулся с такой проблемой. Есть простой ассоциативный массив
array(7) {
  ['1']=>
  int(95)
  ['2']=>
  int(83)
  ['3']=>
  int(64)
  ['4']=>
  int(71)
  ['5']=>
  int(96)
  ['6']=>
  int(95)
  ['7']=>
  int(7)
}


Нужно отсортировать его по значению, при этом сохраняя ключ.
Вроде все просто есть функции asort() и arsort(). Но есть очень неприятный момент
Замечание:

Если оба сравниваемых значения эквивалентны, то порядок их в отсортированном массиве не определен.


А мне надо железно чтоб элемент который был раньше, был первым допустим (если сортируем по убыванию), первым относительно элемента с таким же значением.

т.е при сортировке по убыванию должно получится так
array(7) {
  ['5']=>
  int(96)
  ['1']=>
  int(95)
  ['6']=>
  int(95)
  ['2']=>
  int(83)
  ['4']=>
  int(71)
  ['3']=>
  int(64)
  ['7']=>
  int(7)
}


а по возрастанию

array(7) {
  ['7']=>
  int(7)
  ['3']=>
  int(64)
  ['4']=>
  int(71)
  ['2']=>
  int(83)
  ['1']=>
  int(95)
  ['6']=>
  int(95)
  ['5']=>
  int(96)
}
  • Вопрос задан
  • 177 просмотров
Подписаться 1 Средний 7 комментариев
Решения вопроса 1
1. Пройдите по массиву и замените значение каждого элемента на подмассив, содержащий
  • существующее значение элемента
  • порядковый номер элемента



2. Отсортируйте полученный массив функцией uasort с учётом изначальных значений и добавленных порядковых номеров.

3. Ещё раз пройдите по массиву и обратно замените подмассивы на изначальные значения, которые в них содержатся.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
anton_reut
@anton_reut
Начинающий веб-разработчик
Выведи из базы сразу сортированный массив указав в sql запросе Order By ... Asc или Desc
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы