php usort() приводит к странному результату

Я хочу отсортировать по полю banner_id (int). Но при запуске я получаю странный результат.

Результат этого usort() следующий:

101 - 204- 34 - 45 - 69 - и т.д.

Я должен получить:

34 - 45 -69 - 101 - 204

function usort_reorder($a,$b){
    $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'banner_id'; 
    $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc'; 
    $result = strcmp($a[$orderby], $b[$orderby]); 
    return ($order==='asc') ? $result : -$result; 
}

usort($data, 'usort_reorder');

Что сделать, чтобы эта сортировка работала корректно. Означает сортировку не только первой цифры, но и всей цифры. Теперь хватает только первого.


person Hermants    schedule 16.08.2017    source источник
comment
strcmp сравнивает значения как строки, а не числа.   -  person Ry-♦    schedule 16.08.2017
comment
какое сравнение я должен использовать здесь тогда?   -  person Hermants    schedule 16.08.2017
comment
Если ваше поле $a[$orderby] является числовым, вы можете просто использовать $result = $a[$orderby] > $b[$orderby];.   -  person xander    schedule 16.08.2017
comment
Я нашел это. strnatcmp() - это решение   -  person Hermants    schedule 16.08.2017
comment
$a[$orderby] <=> $b[$orderby] если вы используете PHP 7.   -  person Ry-♦    schedule 16.08.2017
comment
@xander: Разве сравнение не должно возвращать -1, если $a < $b?   -  person Ry-♦    schedule 16.08.2017
comment
@ Райан, да, ты прав, я просто думал о порядке сортировки, а не о возвращаемом значении функции сравнения. Кстати, вы можете использовать оператор космического корабля в PHP7 $result = $a[$orderby] <=> $b[$orderby];, который будет правильным (-1, 0 или 1).   -  person xander    schedule 16.08.2017


Ответы (1)


function sortScripts($a, $b)
{
    return $a['order'] - $b['order'];
}

Используйте $b-$a, если вы хотите обратный порядок.

Если рассматриваемые числа превышают целочисленный диапазон PHP, return ($a < $b) ? -1 : (($a > $b) ? 1 : 0) более надежен.

Вы можете проверить эту ссылку для большего понимания эквивалента strcmp для целых чисел (intcmp) в PHP< /а>

person Dawud Abdul Manan    schedule 16.08.2017