首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP usort()未按预期工作

PHP usort()未按预期工作
EN

Stack Overflow用户
提问于 2015-10-11 00:00:39
回答 1查看 936关注 0票数 0

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

print_r($my_songs_object)返回(严重简化):

代码语言:javascript
复制
stdClass Object
(
    [0] => stdClass Object
        (
            [track] => stdClass Object
                (
                    [name] => ZZZ
                )
        )

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

我的PHP排序代码:

代码语言:javascript
复制
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。我使用以下代码来组合它们:

代码语言:javascript
复制
$my_songs_object = (object)array_merge((array)$a->items, (array)$b->items);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-11 02:02:53

答案是,实际上,在初始合并之后,我根本不需要将数组键入到对象中。

改变:

代码语言:javascript
复制
$my_songs_object = (object)array_merge((array)$a->items, (array)$b->items);

至:

代码语言:javascript
复制
$my_songs_object = array_merge((array)$a->items, (array)$b->items);

解决了问题。感谢@Cbroe让我注意到这一点:)

两天后我会把这件事标为已解决的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33060231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档