Задать вопрос
@avr1972

Объясните пожалуйста как работает функция php usort()?

Вот пример из документации
<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}
?>

Я не могу понять какая связь между тем, что функция cmp возвращает 0 или -1 или 1 и тем что массив сортируется по порядку значений? Что попадает в переменную $b функции cmp? В переменную $a функции cmp попадает массив $a? Каков механизм работы функции usort() по шагам? Заранее большое спасибо за ответ.
  • Вопрос задан
  • 3573 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
DevMan
@DevMan
все просто:
1 двигает элемент вниз массива, -1 двигает элемент вверх массива, 0 оставляет на месте.
Почему uasort отрабатывает не так как ожидается?
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Что попадает в переменную $b функции cmp? В переменную $a функции cmp попадает массив $a?
Функция cmp вызывается за время выполнения usort множество раз. А эти переменные содержат любые два элемента сортируемого массива. В вашем случае это 3 и 2, 3 и 5, 3 и 6, 3 и 1, 2 и 5 и т.д. (не обязательно в таком порядке).
Ответ на ваш вопрос легко узнать, используя инструменты отладки. Простейший var_dump() приоткроет завесу тайны - ideone.com/ubi7Aq

Я не могу понять какая связь между тем, что функция cmp возвращает 0 или -1 или 1 и тем что массив сортируется по порядку значений?
Исходя из вышесказанного, должно быть понятно что означает возвращаемое значение - больше один элемент массива, чем другой, меньше или они равны.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽