【问题标题】:PHP - Sorting an array of objects by object property [duplicate]PHP - 按对象属性对对象数组进行排序[重复]
【发布时间】:2014-09-17 08:22:30
【问题描述】:

我相信你很好。

我想尝试按对象的 score 属性对该数组进行排序。下面是数据示例(print_r)。

Array
(
    [0] => stdClass Object
        (
            [device] => 352454530452548
            [reg] => MAM 432A
            [distance] => 823.36
            [ha_points] => 1
            [hb_points] => 235
            [hc_points] => 7.5
            [idling_points] => 111.5
            [speeding_points] => 168
            [total] => 523
            [score] => 68.239895064127
        )

    [1] => stdClass Object
        (
            [device] => 3518020541565265
            [reg] => SM** ***
            [distance] => 851.07
            [ha_points] => 14
            [hb_points] => 136
            [hc_points] => 6
            [idling_points] => 50
            [speeding_points] => 336
            [total] => 542
            [score] => 68.957730856451
        )

分数可以是 0 到 100 之间的任何值,我想将它们按降序排序(最大的在前?)。更复杂的是,尽管机会非常渺茫,但可能有两个相同的分数,在这种情况下,哪个是第一个并不重要。

有什么想法吗?

提前致谢,

保罗

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    一个简单的usort 就可以完成这项工作。

    $arrData = array(/* ... */);
    usort($arrData, function($a, $b) {
        return $a->score < $b->score ? 1 : -1;
    });
    

    【讨论】:

    • 你需要返回一个整数1,而不是布尔值!
    • 太棒了,虽然我不得不将返回值更改为 $a->score score 因为它是升序的。非常感谢欢呼!
    • @deceze:谢谢,忘记了。谁添加了- - 它无法正常工作,因为这些是浮点数,并且差异将被四舍五入。
    • 真正关于花车。您仍然应该返回 三个 可能的返回状态,而不仅仅是 2 个!
    最近更新 更多