сортировать значения массива целыми числами над другими типами данных - PullRequest
1 голос
/ 28 сентября 2019

У меня есть такой массив:

$arr = [456, 8, 1, -9, 'string', true, 0, -65, -162]

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

Я пытался с rsort($arr), тогда я делаю var_dump, но в результате получается

array (size=9)
0 => int 456
1 => int 8
2 => int 1
3 => string 'string' (length=6)
4 => int -9
5 => boolean true
6 => int 0
7 => int -65
8 => int -162

, как сделать этот массив отсортированным с целым числом выше другого типа данных?

пример:

$arr = [456, 8, 1, 0, -9,-65, -162, 'string', true]

1 Ответ

2 голосов
/ 28 сентября 2019

Вы можете использовать usort с пользовательской функцией сортировки, которая проверяет целые числа перед сравнением значений:

usort($arr, function ($a, $b) {
    if (is_integer($a) && !is_integer($b)) return -1;
    elseif (!is_integer($a) && is_integer($b)) return 1;
    else return $b <=> $a;
});
var_dump($arr);

Вывод:

array(9) {
  [0]=>
  int(456)
  [1]=>
  int(8)
  [2]=>
  int(1)
  [3]=>
  int(0)
  [4]=>
  int(-9)
  [5]=>
  int(-65)
  [6]=>
  int(-162)
  [7]=>
  string(6) "string"
  [8]=>
  bool(true)
}

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...