2010-09-28 63 views
0

在過去的幾天結束時,我試圖讓我的周圍如下頭:定製與usort排序在PHP - 數值排序0在列表

我有一個2維數組和我嘗試使用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"]; 
    } 
} 

我認爲這樣做會訣竅,但只有一部分entrys與零排序到列表的末尾。我非常舒服,列表沒有損壞,並且傾倒整個數組向我顯示,每個使用的條目都會在應該出現的位置提供一個零,但是他們沒有按照正確的方式排序。

由於提前, 約翰尼

+0

你的數組是什麼樣的? – 2010-09-28 09:09:31

+0

我的數組看起來像: – Johnnycube 2010-09-28 09:29:48

+0

array(array(「number」 - > 0,「year」 - > 2010),array(「number」 - > 2,「year」 - > 2010)) – Johnnycube 2010-09-28 09:30:26

回答

2

你忘了應用相同的推理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 
+0

非常感謝您 – Johnnycube 2010-09-28 09:29:10

+0

@ Johnnycube - 不客氣 – Ishtar 2010-09-28 09:34:02