2010-09-28 77 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