PHP usort 不会对类进行排序

2022-08-30 22:44:43

这是要排序的 elemnt 数组的示例:

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

所以,假设我想按 排序。这是我的 usort 回调函数: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);

--更新--

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

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

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

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


答案 1

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

如果是这种情况,那么您应该以这种方式调用 usort:

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

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

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

答案 2

此外,您可以在类中设置静态函数:

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

并这样称呼它:

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

推荐