【问题标题】:Sort array with objects on property of objects使用对象属性对数组进行排序
【发布时间】:2015-06-08 11:42:52
【问题描述】:

我想按特定对象的属性对对象数组进行排序。这是我的对象数组:

如您所见,我有一个包含 2 个对象 的数组 $all_studies。我现在如何对对象的 graduationYear 属性进行排序?所以我想有一个包含对象的数组和对象的顺序,首先是 2010,然后是 2014,......(在这种情况下,顺序已经正确,但并不总是相同......)。

这是我尝试过但没有成功的方法:

$all_studies = usort($all_studies, "sort_objects_by_graduationyear");

function sort_objects_by_graduationyear($a, $b) {
    if((int)$a->graduationYear == (int)$b->graduationYear){ return 0 ; }
    return ($a->graduationYear < $b->graduationYear) ? -1 : 1;
}

但我只是得到true 回来。我从来没有使用过 usort 函数,所以我真的不知道如何使用它。有人可以帮我吗?

【问题讨论】:

  • link
  • usort 就地排序,它不返回结果。请参阅the manual 中的示例。
  • 如果我想改变订单,从大到酒糟,我可以在你的函数中改变什么让它工作,谢谢?

标签: php arrays sorting object numbers


【解决方案1】:

usort 函数在成功时返回“true”。所以,好消息:)。

如果你想检查排序是否完成,你只需要在 usort 之后检查你的 $all_studies 对象。

$status = usort($all_studies, "sort_objects_by_graduationyear");
print_r($all_studies);

【讨论】:

    【解决方案2】:

    您将usort 的值分配给$all_studies,这将是truefalse,因此您没有获得所需的值。事实上,您只需要 sort 数组和 print 值就可以了

    试一试

    usort($all_studies, "sort_objects_by_graduationyear");
    
    function sort_objects_by_graduationyear($a, $b) {
        if((int)$a->graduationYear == (int)$b->graduationYear){ return 0 ; }
        return ($a->graduationYear < $b->graduationYear) ? -1 : 1;
    }
    
    print_r($all_studies);
    

    返回值¶

    成功时返回 TRUE,失败时返回 FALSE。

    Check Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2011-09-06
      • 2012-02-20
      • 2010-11-02
      相关资源
      最近更新 更多