【发布时间】:2011-09-19 04:11:20
【问题描述】:
这是要排序的元素数组的示例:
$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 sort!'
【问题讨论】:
-
brand_name 甚至不存在于这些对象中。
-
您打印的是
usort还是$items的返回值?因为usort仅在成功时返回布尔值,否则返回 false。 -
对不起,伙计们,我更正了这个例子。
-
好的,我想通了......我认为我有错误报告是我的错误。所有这些代码,包括函数 cmp 都在一个类中,所以我得到了这个并且没有意识到“(!)警告:usort()期望参数2是一个有效的回调,函数'cmp'没有找到或无效的函数名在……”
-
@ign ,很高兴您现在可以插入您的问题解决方案作为答案,并为未来可能遇到类似问题的读者接受它。