对象数组上的PHP usort函数不工作
我有以下对象数组:对象数组上的PHP usort函数不工作,php,arrays,usort,Php,Arrays,Usort,我有以下对象数组: array ( 0 => MyObject::__set_state(array( 'id' => '1176', 'value' => 'Oranges', )), 1 => MyObject::__set_state(array( 'id' => '1178', 'value' => 'Bananas', )), 2 => MyObject::__se
array (
0 => MyObject::__set_state(array(
'id' => '1176',
'value' => 'Oranges',
)),
1 => MyObject::__set_state(array(
'id' => '1178',
'value' => 'Bananas',
)),
2 => MyObject::__set_state(array(
'id' => '1179',
'value' => 'grapes',
)),
)
我想按值升序排序,因此我使用以下方法:
usort($myObjectArray, function($a, $b) {
return strcmp($a->value, $b->value);
});
但我很抱歉什么都没有排序?您可以这样做:
function cmp($a, $b) {
return strcmp($a->value, $b->value);
});
usort($myObjectArray,"cmp");
在PHP7中,您可以在比较函数中使用 我只是用下面的代码对它进行了测试,它按照您的预期工作,无需使案例统一 注意:我刚刚通过铸造数组创建了一个
stdClass
对象数组
$objArr=[
(对象)[
'id'=>'1176',
'value'=>'Oranges',
],
(对象)[
'id'=>'1178',
“值”=>“香蕉”,
],
(对象)[
'id'=>'1179',
'值'=>'葡萄',
],
];
usort($objArr,函数($a,$b){
//使用return$b->value$a->value;
//颠倒顺序
返回$a->value$b->value;
});
其结果如下:
usort($myObjectArray, function($a, $b) {
return strcmp($a->value, $b->value);
});
print\r($objArr);
排列
(
[0]=>stdClass对象
(
[id]=>1178
[值]=>香蕉
)
[1] =>stdClass对象
(
[id]=>1176
[值]=>橙子
)
[2] =>stdClass对象
(
[id]=>1179
[价值]=>葡萄
)
)
如果案例是一个问题(即葡萄和葡萄应该被分类),那么这很有用。您可以尝试下面的代码。我检查了它的工作是否正常:
class MyObject
{
public $id;
public $value;
}
$a = [];
$ob = new MyObject();
$ob->id = '1176';
$ob->value = 'Lemons';
$ob2 = new MyObject();
$ob2->id = '1178';
$ob2->value = 'apples';
$ob3 = new MyObject();
$ob3->id = '1179';
$ob3->value = 'grapes';
$a[] = $ob;
$a[1] = $ob2;
$a[2] = $ob3;
usort( $a, function($a, $b) {
return strcmp(mb_strtolower($a->value), mb_strtolower($b->value));
});
print_r($a);
输出:
Array
(
[0] => MyObject Object
(
[id] => 1178
[value] => apples
)
[1] => MyObject Object
(
[id] => 1179
[value] => grapes
)
[2] => MyObject Object
(
[id] => 1176
[value] => Lemons
)
)
您还可以检查-是否可以显示一个
打印($myObjectArray)
请在其上显示一个类似于方法调用数组的演示?请确保在比较之前将它们转换为统一大小写<代码>返回strcmp(strtolower($a->值),strtolower($b->值))@vivek_23是的,我刚刚检查过,这就是问题所在。请对您的答案添加一些解释-是什么让您认为这种行为有所不同?