帮助用户定义排序功能

时间:2011-09-22 04:00:23

标签: php sorting usort

function sort_searches($a, $b)
{
    return
    (
        (isset($b['Class_ID']) && !isset($a['Class_ID'])) 
        ||
        ($b['Results'] && !$a['Results']) 
        || 
        (is_array($a['Results']) && !$a['Results'] && !is_array($b['Results']))
    );
}

我在usort()中使用此功能。预期的效果是,搜索列表将首先按其是否具有Class_ID进行排序,然后按结果排序(使用非空结果数组>结果=== false> results === empty array()所以一组有序的搜索结果如下:

Class_ID with results
Class_ID with results === false
Class_ID with results === array()
No Class_ID with results
No Class_ID with results === false
No Class_ID with results === array()

目前,函数对结果排序完全正常,但不是搜索是否具有Class_ID。

usort($searches, 'sort_searches')

1 个答案:

答案 0 :(得分:1)

来自the PHP docs

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

您的函数未返回整数。


要拼写出来,假设我们想为数字编写一个排序函数(完全没必要,但是对于练习):

function sort_nums($a, $b)
{
    if ($a < $b) return -1; // $a is less than $b
    if ($a > $b) return 1; // $a is greater than $b
    return 0; // $a is equal to $b
}