根据特定属性对对象数组进行排序
P粉426780515
P粉426780515 2023-08-21 15:57:31
[PHP讨论组]

如何按照字段(如namecount)对这个对象数组进行排序?

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
        )

   ....


P粉426780515
P粉426780515

全部回复(2)
P粉285587590

这是一种使用闭包的更好的方式

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

请注意,这不是PHP文档中的内容,但如果您使用的是5.3+版本,支持闭包,可以提供可调用的参数。

P粉020085599

使用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"应该是类中的一个方法
  • 使用箭头函数(从PHP 7.4开始)

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

另外,如果你要比较数值,fn($a, $b) => $a->count - $b->count作为“比较”函数应该可以解决问题,或者,如果你想以另一种方式做同样的事情,从PHP 7开始你可以使用太空船操作符,像这样:fn($a, $b) => $a->count <=> $b->count

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号