PHP сортирует многомерный массив по нескольким критериям

  • Автор темы Vova4
  • Обновлено
  • 15, May 2024
  • #1
Я пишу код на PHP и имею многомерный массив. Я хотел бы отсортировать свой массив. Самый важный критерий – общее количество баллов. Второй критерий — имя.

Я не хочу уничтожать индексы.

Я пробовал usort, uasort, uksort и т. д., но это не работает.

Как уже было сказано, массив следует отсортировать следующим образом:

1 место по [информация][всего], по убыванию

2 место по [информация][имя], по возрастанию

  foreach ($array as &$item)
 {
 uasort($item, function ($a, $b)
 {
 if ($a['info']['total'] == $b['info']['total'])
 {
 return $b['info']['name'] - $a['info']['name'];
 }
 else
 {
 return $b['info']['total'] - $a['info']['total'];
 }
 });
 }


Код (разметка): Итак, результат должен быть таким:

  Array ( [380] => Array ( [4] => Array ( [6] => Array () ) [info] => Array ( [name] => Davis Ben [total] => 14500 ) [2] => Array ( [5] => Array () ) ) [183] => Array ( [3] => Array ( [1] => Array () ) [1] => Array ( [8] => Array () ) [info] => Array ( [name] => Doe John [total] => 4800 ) ) )


Код (разметка): Я пробовал это:

  Array ( [183] => Array ( [3] => Array ( [1] => Array () ) [1] => Array ( [8] => Array () ) [info] => Array ( [name] => Doe John /* 2nd criteria */ [total] => 4800 /* 1st criteria */ ) ) [380] => Array ( [4] => Array ( [6] => Array () ) [info] => Array ( [name] => Davis Ben /* 2nd criteria */ [total] => 14500 /* 1st criteria */ ) [2] => Array ( [5] => Array () ) ) )


PHP:

Vova4


Рег
27 May, 2013

Тем
70

Постов
187

Баллов
567
  • 10, Jun 2024
  • #2
Вот:
  uasort($array, function($a, $b)
 {
 if ($a['info']['total'] == $b['info']['total'])
 {
 return strcmp($a['info']['name'], $b['info']['name']); # ascending
 }

 return $b['info']['total'] - $a['info']['total']; # descending
 });
PHP:
 

Innongeobesee27


Рег
17 Oct, 2012

Тем
60

Постов
193

Баллов
523
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно