PHP usort不会排序

Nac*_*cho 15 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)
Run Code Online (Sandbox Code Playgroud)

所以,让我们说我想排序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...
    }

}
Run Code Online (Sandbox Code Playgroud)

当我什么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!';
Run Code Online (Sandbox Code Playgroud)

它始终打印' Cant sort!"

Nac*_*cho 48

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

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

usort($items, array("MyClass", "compare_method"));
Run Code Online (Sandbox Code Playgroud)

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

usort($items, array('Full\Namespace\WebPageInformation', 'compare_method'));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,与uksort有同样的问题.文档说uksort将返回true或false,并返回null. (2认同)
  • 如果其他人仍有问题,请尝试使您的比较功能"静态". (2认同)