首页 >后端开发 >php教程 >如何在 PHP 中按特定属性对对象数组进行排序?

如何在 PHP 中按特定属性对对象数组进行排序?

Patricia Arquette
Patricia Arquette原创
2024-12-25 04:51:12358浏览

How to Sort an Array of Objects by a Specific Property in PHP?

按属性对数组中的对象进行排序

处理对象数组时,您可能会遇到需要根据特定属性来组织它们的情况领域或财产。本文解决了如何按指定字段(例如名称或计数)对对象数组进行排序的问题。

为了实现此目的,PHP 为我们提供了 usort 函数。它接受一个数组作为其第一个参数,一个可调用对象作为其第二个参数,用作比较函数。此比较函数应返回一个整数,指示比较结果:如果第一个对象应该出现在第二个对象之前,则返回 -1;如果它们相等,则返回 0;如果第二个对象应该出现在第一个对象之前,则返回 1。

让我们考虑一个包含对象数组的示例:

$array = [
    (object) ['name' => 'Mary Jane', 'count' => 420],
    (object) ['name' => 'Johnny', 'count' => 234],
    (object) ['name' => 'Kathy', 'count' => 4354],
];

要按名称字段对该数组进行排序,我们可以定义一个比较函数为如下:

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

现在我们可以使用 usort 对数组进行排序:

usort($array, 'cmp');

这将按名称字段的升序对数组进行排序。

替代方法

除了传统的比较函数之外,PHP 还提供了各种排序的替代方法:

  • 匿名函数:这些允许您内联定义比较函数,例如:
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
  • 类内部:如果有类,可以定义一个比较方法并通过对其进行排序,例如:
class MyComparator {
    public function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
}

$array = usort($array, [new MyComparator(), 'cmp']);
  • 箭头函数 (PHP 7.4 ):这些提供了一种简洁的方法来定义比较函数,例如:
usort($array, 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

以上是如何在 PHP 中按特定属性对对象数组进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn