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

$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进行排序。
这是我的usort回调函数:
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);时,什么也没有发生。有关如何解决此问题的任何线索?

-更新-

好的,我已将问题简化为:
function cmp($itemA, $itemB){
    return -1;
}

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

它总是打印' Cant排序! '

最佳答案

最后,我发现了此错误的根源。问题在于此代码在类中。

如果是这种情况,则应通过以下方式调用usort:

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

此外,如果您的Class在 namespace 中,则应在usort中列出完整的 namespace 。
usort($items, array('Full\Namespace\WebPageInformation', 'compare_method'));

关于php - PHP usort不会对类进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6419818/

10-11 14:45