Выборочная сортировка с помощью usort в PHP - числовая сортировка с 0 в конце списка - PullRequest
0 голосов
/ 28 сентября 2010

В последние пару дней я пытался разобраться в следующем:

У меня есть двумерный массив, и я пытаюсь отсортировать его с помощью специального алгоритма, используя usort ().

Моя проблема в том, что я пытаюсь отсортировать числа, как в порядке 1 2 3 0, поэтому ноль всегда должен быть последним элементом.

function customsort($e1, $e2) {
    if ($e1["number"] == $e2["number"]) {
        return $e1["year"] - $e2["year"];
    } elseif ($e1["number"] == 0) {
        return 1;
    } else {
        return $e1["number"] - $e2["number"];
    }
}

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

Заранее спасибоДжонни

1 Ответ

2 голосов
/ 28 сентября 2010

Вы забыли применить те же рассуждения к e2:

function customsort($e1, $e2) {
    if ($e1["number"] == $e2["number"]) {
        return $e1["year"] - $e2["year"];
    } elseif ($e1["number"] == 0) {
        return 1;
    } elseif ($e2["number"] == 0) {
        return -1;
    } else {
        return $e1["number"] - $e2["number"];
    }
}

Вы сравниваете функцию должны иметь это свойство, чтобы иметь смысл

customsort($foo, $bar) == -1*customsort($bar, $foo)

за каждые $foo и $bar.В частности (что пошло не так в вашем случае)

customsort({'number'=>3},{'number'=>0}); // should give a negative number, because
customsort({'number'=>0},{'number'=>3}); // gives a positive number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...