【问题标题】:Sorting an array of objects by field makes no difference按字段对对象数组进行排序没有区别
【发布时间】:2019-06-04 17:42:05
【问题描述】:

我有一个名为$pages 的数组。在里面,我们有几个字段的对象。其中一个字段是title

我想按title 的字母顺序排序。

在一个名为 PLUGIN_PAGES 的类中,我声明了这个...

public function mySort($a, $b)
{
return $a->title < $b->title;
}

在我调用的另一个方法中

 usort ($pages, array("PLUGIN_PAGES", "mySort"));

没有错误。它似乎正在运行,但 $pages 仍未排序。

有什么想法吗?

【问题讨论】:

    标签: php arrays function sorting


    【解决方案1】:

    您的函数应根据比较返回小于零、等于 0 或大于 0 的整数。你可以用 spaceship 操作符来做这个速记:

    public function mySort($a, $b)
    {
        return $a->title <=> $b->title;
    }
    

    这基本上等同于:

    public function mySort($a, $b)
    {
        if ($a->title < $b->title) {
            return -1;
        }
        if ($a->title > $b->title) {
            return 1;
        }
        return 0;
    }
    

    对于旧版本的 PHP,您可以使用@Dharman 的建议:

    public function mySort($a, $b)
    {
        return strcmp($a->title, $b->title);
    }
    

    【讨论】:

    • @SpaceDog 你可能还在使用旧的 PHP 版本。尝试升级到最新版本,否则尝试strcmp
    • 你有一个旧版本的 PHP 没有它。您必须写出条件或使用@Dharman 的建议。
    • 不过,公平地说——任何没有 spaceship 运算符的 PHP 版本都已被淘汰。
    • 其实“比较函数必须返回一个小于、等于或大于零的整数” 不需要是-1、0或1。
    • 现在工作。我在代码的另一部分有错字。谢谢大家!
    猜你喜欢
    • 2011-05-16
    • 2015-03-11
    • 1970-01-01
    • 2014-10-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多