У меня есть массив экземпляров объекта, мне нужно отсортировать их в зависимости от того, что возвращает функция внутри объекта.

Итак, в основном мой объект имеет 2 переменные, функция сложит их вместе, а затем вернет результат, список объектов необходимо отсортировать на основе этого.

Мой код сортировки:

function cmp($a, $b)
{
  if ($a->calcPoints() == $b->calcPoints()) {
     return 0;
  }
  return ($a->calcPoints() > $b->calcPoints()) ? -1 : 1;
}
usort($teamData, "cmp");

Без использования функции usort при выгрузке массива я получаю следующее:

Ключ: "Халл Сити ФК" Значение: {"победа": 3, "ничья": 2, "поражение": 8, "goalFor": 11, "goalConc": 28} Ключ: "Leicester City FC" Значение: { «win»: 3, «ничья»: 4, «проигрыш»: 6, «goalFor»: 16, «goalConc»: 22}

После того, как я использовал функцию usort, мои ключи заменяются следующим образом:

Ключ: 0 Значение: {"win": 10, "draw": 1, "loss": 2, "goalFor": 29, "goalConc": 10} Ключ: 1 Значение: {"win": 9, "draw ": 3," loss ": 1," goalFor ": 29," goalConc ": 12}

Как я могу это остановить?

0
Martyn Ball 27 Ноя 2016 в 21:33

2 ответа

Лучший ответ

Если вы посмотрите usort() в руководстве, вы найду:

Примечание. Эта функция назначает новые ключи элементам в массиве. Он удалит все существующие ключи, которые могли быть назначены, а не просто переупорядочиваю ключи.

Однако uasort(), однако, будет: "Сортировать массив с определяемой пользователем функцией сравнения и поддерживать ассоциацию индексов ". Давай, попробуй, это должно быть то, что ты ищешь.

2
Niellles 27 Ноя 2016 в 19:17

Вам следует использовать функцию uasort вместо usort. Согласно документации PHP:

uasort - сортирует массив с помощью пользовательской функции сравнения и поддерживать связь индекса

1
aslawin 27 Ноя 2016 в 19:17