Некоторое уточнение функции uasort - PullRequest
2 голосов
/ 31 января 2012

Мне нужно использовать функцию uasort () , но я не понимаю, как получить аргументы в функции ... Данный пример мне не совсем понятен. Как функция cmp получает свои аргументы? Кто-то хочет объяснить?

<?php
// Comparison function
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

// Array to be sorted
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);

// Sort and print the resulting array
uasort($array, 'cmp');
print_r($array);
?>

1 Ответ

0 голосов
/ 31 января 2012

Порядок, в котором элементы выбираются из массива, не должен иметь никакого значения для работы вашей функции сравнения.

uasort будет применяться до тех пор, пока каждый элемент в вашем массиве не будет отсортирован на основепосле сравнения вы применяете его в своей функции cmp.

Обновлено

Если вы действительно хотите узнать, как это отсортировано, посмотрите на источник PHP,Сначала к массиву применяется zend_hash_sort, который использует функцию сравнения zend_qsort, которая, насколько я знаю, просто упорядочивает по значению.

Попробуйте изменить функцию cmp на следующую, чтобы увидеть, что происходит:

function cmp($a, $b) {
    echo "a=$a, b=$b"; // add this to see what's going on
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
...