3 回答
TA贡献1801条经验 获得超8个赞
从 php 7 开始,您可以在比较函数中使用宇宙飞船运算符。
我刚刚用下面的代码测试了它,它按照您的预期工作,而无需使情况统一。
注意:我只是通过转换数组制作了一个对象数组。stdClass
$objArr = [
(Object) [
'id' => '1176',
'value' => 'Oranges',
],
(Object) [
'id' => '1178',
'value' => 'Bananas',
],
(Object) [
'id' => '1179',
'value' => 'grapes',
],
];
usort($objArr, function($a, $b) {
// use return $b->value <=> $a->value;
// to reverse order
return $a->value <=> $b->value;
});
这将导致以下结果:
print_r($objArr);
Array
(
[0] => stdClass Object
(
[id] => 1178
[value] => Bananas
)
[1] => stdClass Object
(
[id] => 1176
[value] => Oranges
)
[2] => stdClass Object
(
[id] => 1179
[value] => grapes
)
)
如果情况是一个问题(即葡萄和葡萄应该分类),则很有用。
TA贡献1797条经验 获得超6个赞
您可以尝试下面的代码。我检查了它的工作正常:
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
)
)
TA贡献1111条经验 获得超0个赞
你可以这样做:
function cmp($a, $b) {
return strcmp($a->value, $b->value);
});
usort($myObjectArray,"cmp");
- 3 回答
- 0 关注
- 159 浏览
添加回答
举报