[英]PHP usort function on object array not working
我有以下对象数组:
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");
从 php 7 开始,您可以在比较函数中使用spaceship 运算符。
我只是用下面的代码对其进行了测试,它按您的预期工作,无需使案例统一。
注意:我只是通过转换数组创建了一个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
)
)
如果案例是一个问题(即葡萄和葡萄是否应该分类),则很有用。
你可以试试下面的代码。 我检查它工作正常:
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
)
)
你也可以检查 - Doc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.