PHP usort不会排序

时间:2011-06-21 02:47:49

标签: php usort

这是要排序的元素数组的示例:

$items = 
    array
      0 => 
        object(stdClass)[8]
          public 'id' => string '110' (length=3)
          public 'brand_id' => string '18' (length=2)
            array
              0 => string ' OT-708' (length=7)
          public 'failed' => null
          public 'diff' => null
      1 => 
        object(stdClass)[9]
          public 'id' => string '161' (length=3)
          public 'brand_id' => string '18' (length=2)

所以,假设我想按brand_id排序。 这是我的回程功能:

function _compare($itemA, $itemB){

    if ($itemA->brand_id == $itemB->brand_id) {

        return 0; 
    }
    else{
        return strcmp($itemA->brand_id, $itemB->brand_id); //just an example...
    }

}

当我做usort($items, '_compare'); var_dump($items);时,没有任何事情发生。关于如何排除故障的任何线索?

- UPDATE -

好的,我已将问题简化为:

function cmp($itemA, $itemB){
    return -1;
}

if (usort($items, "cmp"))
                echo 'I just sorted!';
else echo 'Cant sort!';

它总是打印'不能排序!'

3 个答案:

答案 0 :(得分:48)

最后,我发现了这个错误的来源。问题是这段代码在一个类中。

如果那是你的情况,那么你应该这样打电话给我们:

usort($items, array("MyClass", "compare_method"));

此外,如果您的类位于命名空间中,则应在usort中列出完整的命名空间。

usort($items, array('Full\Namespace\WebPageInformation', 'compare_method'));

答案 1 :(得分:2)

此外,您可以在班级中设置静态功能:

static myfunction($a, $b){'yoursort'}

并将其称为:

usort($items, "Class::myfunction");

答案 2 :(得分:1)

如果您在 $this 中使用 usort,也可以使用 Class

usort($my_array, array($this, 'orderByDate'));