这是要排序的元素数组的示例:
$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!';
它总是打印'不能排序!'
答案 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'));