PHP usort()没有按预期工作

时间:2015-10-11 00:00:40

标签: php usort

我有一些简单的PHP代码,用于格式化包含某些歌曲信息的对象。我尝试使用usort()对这些信息进行排序,但我无法让排序正常工作。

print_r($my_songs_object)返回(大大简化):

stdClass Object
(
    [0] => stdClass Object
        (
            [track] => stdClass Object
                (
                    [name] => ZZZ
                )
        )

    [1] => stdClass Object
        (
            [track] => stdClass Object
                (
                    [name] => YYY
                )
        )
)

我的PHP排序代码:

usort($my_songs_object, function($a, $b) {
    return ucfirst($a->track->name) > ucfirst($b->track->name) ? 1 : -1;
});

运行上述usort()后,$my_songs_object始终按顺序返回数据。

在上面的例子中,第1项应该在第0项之前。

如何修改usort函数以实现所需的输出?

修改

原始对象正在创建一个需要组合的两个预先存在的对象的array_merge。我使用以下代码将它们组合在一起:

$my_songs_object = (object)array_merge((array)$a->items, (array)$b->items);

也许修改组合对象的方式会使组合的$ my_songs_object更容易排序?

1 个答案:

答案 0 :(得分:0)

答案是,事实证明,在初始合并之后,我根本不需要将数组转换为对象。

更改:

$my_songs_object = (object)array_merge((array)$a->items, (array)$b->items);

要:

$my_songs_object = array_merge((array)$a->items, (array)$b->items);

解决了这个问题。感谢@Cbroe引起我的注意:)

我会在两天内将此标记为已解决。