Я пытаюсь понять, как работает функция 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 измерений?