2017-08-16 463 views
-1

我想對字段banner_id(int)進行排序。但是在運行時我會得到一個奇怪的結果。php usort()導致奇怪的結果

此usort的結果()被以下操作:

101 - 204-1 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'); 

怎樣才能讓這種排序正確運行。指的不僅是整理第一位數字,而是整個數字。現在只需要第一個。

+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