Помощь с пользовательской функцией сортировки - PullRequest
0 голосов
/ 22 сентября 2011
function sort_searches($a, $b)
{
    return
    (
        (isset($b['Class_ID']) && !isset($a['Class_ID'])) 
        ||
        ($b['Results'] && !$a['Results']) 
        || 
        (is_array($a['Results']) && !$a['Results'] && !is_array($b['Results']))
    );
}

Я использую эту функцию в usort().Предполагаемый эффект состоит в том, что список запросов будет отсортирован сначала по тому, есть ли у них Class_ID, а затем по результатам (с непустым массивом результатов> results === false> results === empty array ().отсортированный набор запросов будет выглядеть так:

Class_ID with results
Class_ID with results === false
Class_ID with results === array()
No Class_ID with results
No Class_ID with results === false
No Class_ID with results === array()

В настоящее время функции сортируются по результатам совершенно нормально, но не по тому, имеет ли поиск идентификатор Class_ID.

usort($searches, 'sort_searches')

1 Ответ

1 голос
/ 22 сентября 2011

С PHP документы :

Функция сравнения должна возвращать целое число меньше, равно или больше нуля, если первый аргумент считается соответственно меньшечем, равно или больше второго.

Ваша функция не возвращает целое число.


Чтобы разобрать это, скажем, мы хотели написать сортировкуфункция для чисел (совершенно ненужная, но для упражнения):

function sort_nums($a, $b)
{
    if ($a < $b) return -1; // $a is less than $b
    if ($a > $b) return 1; // $a is greater than $b
    return 0; // $a is equal to $b
}
...