小编典典

按对象字段对对象数组进行排序

all

如何按其中一个字段(如nameor )对该对象数组进行排序count

  Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [name] => Mary Jane
            [count] => 420
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [name] => Johnny
            [count] => 234
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [name] => Kathy
            [count] => 4354
        )

   ....

阅读 212

收藏
2022-03-06

共1个答案

小编典典

使用usort,这是一个改编自手册的示例:

function cmp($a, $b) {
    return strcmp($a->name, $b->name);
}

usort($your_data, "cmp");

您还可以使用任何可调用对象作为第二个参数。这里有些例子:

  • 使用匿名函数(来自 PHP 5.3)

      usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
    
  • 从班级内部

      usort($your_data, array($this, "cmp")); // "cmp" should be a method in the class
    
  • 使用箭头函数(来自 PHP 7.4)

      usort($your_data, fn($a, $b) => strcmp($a->name, $b->name));
    

此外,如果您要比较数值,fn($a, $b) => $a->count - $b->count“比较”函数应该可以解决问题,或者,如果您想要另一种方式来做同样的事情,从 PHP 7 开始,您可以使用Spaceship
运算符
,如下所示fn($a, $b) => $a->count <=> $b->count

2022-03-06