2017-08-16 5 views
-1

フィールドbanner_id(int)でソートしたい。しかし、走っているときに私は奇妙な結果を得る。php usort()が奇妙な結果になる

このusort()の結果は以下の通りである:

101 - 204- 34 - - 69 - 45等

Iを取得しなければならない:

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'); 

このソートを正しく実行するにはどうすればよいですか。最初の数字だけでなく、数字全体をソートすることを意味します。今は最初のものだけが必要です。

+3

「strcmp」は値を数値ではなく文字列として比較します。 – Ryan

+0

ここで私はどのような比較をするべきですか? – Hermants

+0

あなたのフィールド '$ a [$ orderby]'が数字の場合は、単に '$ result = $ a [$ orderby]> $ b [$ orderby];'を使うだけです。 – xander

答えて

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

逆順を使用する場合は、$b-$aを使用してください。

数値がPHPの整数範囲を超える場合は、return ($a < $b) ? -1 : (($a > $b) ? 1 : 0)がより堅牢です。

strcmp equivelant for integers (intcmp) in PHP