按属性对数组中的对象进行排序
处理对象数组时,您可能会遇到需要根据特定属性来组织它们的情况领域或财产。本文解决了如何按指定字段(例如名称或计数)对对象数组进行排序的问题。
为了实现此目的,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']);
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中文网其他相关文章!