Сортировка при помощи uasort

121
27 мая 2021, 13:10

Есть массив:

$arr = [2,90,40];

Есть функция сортировки, которая «выталкивает» числа кратные 10 вверх списка:

function arrSort($a, $b)
{
    if ($a % 10 == 0 && $b % 10 == 0) return $a <=> $b;
    if ($a % 10 == 0 && $b % 10 != 0) return -1;
    if ($a % 10 != 0 && $b % 10 == 0) return 1;
    return ($a <=> $b);
}

Вызываем функцию:

uasort($arr, 'arrSort');

Получаем результат, который полностью решает нашу задачу:

Array
(
    [2] => 40
    [1] => 90
    [0] => 2
)

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

1) 2 % 10 != 0 && 90 % 10 == 0 return 1
2) 2 <=> 90: return -1
3) 40 % 10 == 0 && 90 % 10 == 0 return -1 
4) 40 <=> 90: return -1

Диагностику работы функции выполняю следующим образом:

function arrSort($a, $b)
{
    if ($a % 10 == 0 && $b % 10 == 0) echo "$a % 10 == 0 && $b % 10 == 0 <b> return " . ($a <=> $b) . "</b> <br />";
    if ($a % 10 == 0 && $b % 10 != 0) echo "$a % 10 == 0 && $b % 10 != 0 <b> return -1 </b> <br />";
    if ($a % 10 != 0 && $b % 10 == 0) echo "$a % 10 != 0 && $b % 10 == 0 <b> return 1 </b> <br />";
    echo "$a <=> $b: " . '<b> return ' . ($a <=> $b) . '</b>' . '<br />';
    if ($a % 10 == 0 && $b % 10 == 0) return $a <=> $b;
    if ($a % 10 == 0 && $b % 10 != 0) return -1;
    if ($a % 10 != 0 && $b % 10 == 0) return 1;
    return ($a <=> $b);
}

Вопрос: можете пошагово объяснить, как именно работает алгоритм, который помещает числа, кратные 10, вверх списка?

READ ALSO
Как сделать insert &hellip; on duplicate key update в Lighthouse-php на Laravel?

Как сделать insert … on duplicate key update в Lighthouse-php на Laravel?

Как сделать mutation чтобы был запрос в БД insert or update?

148
Обновление через pjax

Обновление через pjax

Вообщем есть такая проблема, я вывожу данную на страницу в 3 разных массивахВот так:

135
Как сделать вложенный цикл foreach в for?

Как сделать вложенный цикл foreach в for?

Создаю в папке с помощью цикла for документы с разным наполнениемЭто наполнение подтягивают из json

122
С чего начать программировать? [закрыт]

С чего начать программировать? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

124