@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() по шагам? Заранее большое спасибо за ответ.
  • Вопрос задан
  • 3472 просмотра
Решения вопроса 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 и тем что массив сортируется по порядку значений?
Исходя из вышесказанного, должно быть понятно что означает возвращаемое значение - больше один элемент массива, чем другой, меньше или они равны.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы