繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM