【问题标题】:PHP sort array of stdClass Objects by id [duplicate]PHP按id对stdClass对象的数组进行排序[重复]
【发布时间】:2012-06-23 04:43:12
【问题描述】:

我有一个相当大的数组,看起来像

Array(
   [0] => stdClass Object
        (
            [id] => 8585320
            [title] => the title
            [type] => page
            [url] => link.com
            [excerpt] => brief description
        )

    [1] => stdClass Object
        (
            [id] => 8585320
            [title] => the title
            [type] => page
            [url] => link.com
            [excerpt] => brief description
        )
 )

我无法明显控制数组的形成方式,以及它是如何产生的,似乎它几乎没有逻辑。但我坚持下去。所以我需要做的基本上是按每个stdClass对象对数组进行数字排序,然后确保id是从最大到最小而不是从最小到最大。一直保持数组对象组合的当前结构

我现在什至无法开始思考我需要如何按照我需要的方式对其进行排序。因为它已经足够长的一天了。

更新

public function updateRet($a, $b) {
        return $b->id - $a->id;
    }
usort($ret, 'updateRet');  

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    只需使用usort:

    function compare_some_objects($a, $b) { // Make sure to give this a more meaningful name!
        return $b->id - $a->id;
    }
    
    // ...
    
    usort($array, 'compare_some_objects');
    

    如果你有 PHP 5.3 或更高版本,你也可以使用匿名函数:

    usort($array, function($a, $b) { return $b->id - $a->id; });
    

    【讨论】:

    • 我得到一个无效的比较函数,我认为它的原因是我有一个包含对象的数组。所以我必须让它以某种方式完成$b[x]->id,但这样它就不起作用了
    • @chris:那就用第一种方法吧。确保函数定义正确。
    • 这就是问题所在,不知道如何正确定义它我给它起了一个不同的函数名称,但基本上剩下的就不用管了,就像上面一样使用它。但运气不好。也可能是因为我以 OOP 风格的编码运行它吗?我可以像 $this->compare_some_objects 一样传递它吗(再次更改了该名称,但仅供参考)
    • @chris: It works correctly for me. 你能发布你的代码吗?
    • @chris:不管怎样,问题是它是一个public function,这意味着你把它放在一个类中。它不应该在一个类中。如果您希望它在一个类中,请将其设置为 public static function 并将 'updateRet' 更改为 array('YourClassName', 'updateRet')
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2011-01-09
    • 2016-11-25
    相关资源
    最近更新 更多