为了账号安全,请及时绑定邮箱和手机立即绑定

对象数组上的 PHP usort 函数不起作用

对象数组上的 PHP usort 函数不起作用

PHP
隔江千里 2022-08-05 09:33:42
我有以下对象数组: 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);});  但是我什么都没有排序?
查看完整描述

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

        )


)

如果情况是一个问题(即葡萄和葡萄应该分类),则很有用。


查看完整回答
反对 回复 2022-08-05
?
互换的青春

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

        )


)


查看完整回答
反对 回复 2022-08-05
?
catspeake

TA贡献1111条经验 获得超0个赞

你可以这样做:


function cmp($a, $b) {

    return strcmp($a->value, $b->value);

}); 

usort($myObjectArray,"cmp");


查看完整回答
反对 回复 2022-08-05
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信