Переупорядочить массив PHP с помощью usort и strcomp: ошибка

Использование usort и strcomp вместе для упорядочения массива по одному из его ключей имеет странный эффект: он возвращает мой массив с меньшим количеством элементов, чем я вложил.

Массив в моем случае содержит строки, представляющие задачи, и я хочу упорядочить строки в массиве по ключу displayorder, который является числом, но я хочу отсортировать его в алфавитном порядке (не спрашивайте, почему).

function treeSort($a, $b) {
        return strcmp(strval($a['displayOrder']), strval($b['displayOrder']));
    }

usort($tree, "treeSort");

Есть девять строк, но я получаю только шесть из них. Между прочим, эти шесть хорошо отсортированы. Если я использую uasort вместо usort, я получаю все девять строк, но в числовом порядке.


person Wytze    schedule 12.08.2010    source источник
comment
Можете ли вы привести пример структуры $tree? Кроме того, какая версия PHP?   -  person Tim Stone    schedule 12.08.2010


Ответы (1)


Я нашел решение: array_multisort. Вероятно, это то, что вы предложили бы Тиму, если бы я рассказал вам подробности о $tree.

Получил код из примеров в документации по array_multisort:

foreach ($tree as $key => $row) {
        $sortOrder[$key] = $row['displayOrder'];
    }
    array_multisort($sortOrder, SORT_STRING, $tree);
person Wytze    schedule 12.08.2010