Intereting Posts
Как скопировать ArrayIterator, чтобы сохранить текущую позицию итерации? конвертировать шифрование паролей из java в php Получить текст вне элементов Предупреждение PHP «Предупреждение: ob_start (): функция« не найдена или неверное имя функции »в Symfony 1? Получить визуализацию HTML из локального файла PHP Перегрузка класса поставщика symfony2 для установки параметра curl verify_peer в значение false Regex, получите строковое значение между двумя символами Масштабирование водяного знака для соответствия родительскому изображению Тип жонглирования при проведении свободного сравнения дает нежелательный результат Почему я продолжаю получать ошибку 500 с моим PHP? Удаленный доступ Xampp Получить список общих дисков с помощью PHP в Windows? JQuery – Uncaught TypeError: не может использовать оператор 'in' для поиска '324' в .htaccess в подкаталоге 'overriding' parent htaccess mysqli соединение не работает внутри функции?

Как понять логику usort?

Я пытаюсь понять, как работает функция php usort . У меня такой код:

<?php $users[] = array('login' => 'moon', 'name' => 'Chris'); $users[] = array('login' => 'star', 'name' => 'Piter'); $users[] = array('login' => 'mars', 'name' => 'Tim'); $users[] = array('login' => 'earth', 'name' => 'Garry'); function compare($a, $b) { echo $a['login'] . '--' . $b['login'] . '<br />'; echo strcmp($a['login'], $b['login']) . '<br />'; return strcmp($a['login'], $b['login']); } usort($users, "compare"); echo '<pre>'; print_r($users); echo '</pre>'; ?> 

Он выдаст такой результат:

 star--moon 1 star--mars 1 earth--star -1 moon--earth 1 mars--moon -1 earth--mars -1 Array ( [0] => Array ( [login] => earth [name] => Garry ) [1] => Array ( [login] => mars [name] => Tim ) [2] => Array ( [login] => moon [name] => Chris ) [3] => Array ( [login] => star [name] => Piter ) ) 

Насколько я понимаю, второй параметр должен быть функцией сравнения, и он может возвращать только 3 значения (-1,0,1) и usort использовать эти результаты для сортировки массива? Также я прочитал, usort использует реализацию Quicksort для сортировки массива. Вот почему звезда первая, а луна – вторая? Быстрое разделение массива на две части, а затем сортировку? И могу ли я реализовать эту функцию для массива 2,3 измерений?