我有一个对象数组,它有一个属性id
我希望排序。此属性包含数字作为字符串。我试图将这些字符串转换为整数来对它们进行排序。
array(
object(stdClass)#10717 (26) {
["id"]=>
string(2) "12"
},
object(stdClass)#10718 (26) {
["id"]=>
string(2) "13"
}
object(stdClass)#10719 (26) {
["id"]=>
string(2) "8"
}
...
我的代码是这样的
class Test
{
public static function test( $array ) {
usort( $array, 'callBackSort')
return $array;
}
function callBackSort( $a, $b ) {
$a = $a->id;
$a = (int)$a;
$b = $b->id;
$b = (int)$b;
if ( $a == $b ) {
return 0;
}
return ( $a < $b ) ? -1 : 1;
}
}
// In another file
$array = Test::test($array);
var_dump( $array );
但是这不起作用,数组没有排序(与原始数组没有区别)。我完全不熟悉。
编辑:如果我从类中删除回调函数并将其放在与$array = Test::test($array);
相同的文件中,那么它似乎可以正常工作。
答案 0 :(得分:1)
我认为问题在于你的usort()函数试图调用一个名为&#34; callBackSort&#34;的非静态方法。来自静态背景。
将callBackSort函数保存在与&#34; test&#34;相同的文件(类)中方法,使它静态,公共,保护或私有,取决于你是否将在其他地方使用它,并通过将数组作为第二个参数传递给usort来调用它。
通过by,你的callBackSort函数比它需要的复杂一点。您不需要将值转换为int来进行比较。
class Test
{
public static function test( $array ) {
//this will call a static method called "callBackSort" from class "Test" - equivalent to calling Test::callBackSort()
usort( $array, array("Test", "callBackSort"));
return $array;
}
public static function callBackSort( $a, $b ) {
if ( $a->id == $b->id ) {
return 0;
}
return ( $a->id < $b->id ) ? -1 : 1;
}
}
针对类似案例,请参阅此答案: Using usort in php with a class private function