Сортировка объекта массива, если два значения ключа равны, то совпадение с другой парой значений ключа - PullRequest
1 голос
/ 02 августа 2020

Я хочу отсортировать массив объектов php, в котором я должен учитывать два разных ключа при сортировке, если значение двух пользователей совпадает, тогда рассмотрите другой ключ для этих значений. пример

[{'id':'1','total_number':'90','previous_number':'75'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'5','total_number':'95','previous_number':'80'}
]

Массив результатов:

[{'id':'5','total_number':'95','previous_number':'80'}, 
 {'id':'1','total_number':'90','previous_number':'75'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'} 
]

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете использовать пользовательскую функцию сортировки для достижения желаемого результата с помощью функции usort в PHP https://www.php.net/manual/en/function.usort.php

// custom sort function
function mySort($a, $b) {
  // is total_number same?
  if ($a->total_number === $b->total_number) {
    // use previous_number to sort
    if ($a->previous_number === $b->previous_number) {
      return 0;
    }
    // sort desc
    return $a->previous_number > $b->previous_number ? -1 : 1;
  }
  // sort desc
  return $a->total_number > $b->total_number ? -1 : 1;
}


// call the function
usort($array, 'mySort');
...