帮助用户定义排序函数


Help with user defined sort function

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进行排序,然后根据结果进行排序(结果的非空数组> results === false> results === empty数组())。因此,排序后的搜索集看起来像:

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

从PHP文档:

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

你的函数没有返回整数。


详细说明一下,假设我们想为数字编写一个排序函数(完全没有必要,但只是为了练习):

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
}