【问题标题】:Sorting objects in array对数组中的对象进行排序
【发布时间】:2014-03-13 13:51:14
【问题描述】:

我有一个包含多个值的对象数组。值设置正确,该数组中的数据也按照对象的顺序正确显示。

我现在想要什么 ii 订单已更改。在此特定示例中,根据对象的“Point”值,因此具有最高 Pointvalue 的对象排在第一位,依此类推...

我试图做的是找到具有最高值的对象,将其推入数组并取消设置原始值。最后用 array_slice 获取相关的数组元素。

我在第一部分也成功了,但问题是我一直在寻找相同的对象,所以我没有将它从数组中删除。

$max = $obj[0];
    for ($j =0; $j<count($obj)-$j; $j++) {
        for ($i=0; $i<count($names); $i++) {
            if ($max->Point < $obj[$i+1]->Point) {
                $max = $obj[$i+1];
            }
        }
        if ($max->id == $obj[$j]->id) {
            unset($obj[$j]);
        }
        array_push($obj, $max);
    }

我不确定您是否可以看穿代码以及我正在尝试做什么,但希望有人可以显示我的错误,或者向其他人展示完成相同操作的方法?

【问题讨论】:

标签: php arrays


【解决方案1】:

尝试使用usort() function。它允许您根据您定义的比较函数对数组进行排序。

function lower_points($a, $b) {
    if ($a->Point == $b->Point) return 0;
    else if ($a->Point > $b->Point) return -1;
    else return 1;
}

usort($array_of_objects, lower_points);

【讨论】:

  • 这是一个很短的答案。您应该展开它,或者改为将其作为评论。
  • 可能推迟 30 秒左右?
  • 好吧,也许首先写一个完整的答案,而不是过早地提交它成为“第一个”......? ;-)
  • @CBroe 对我来说似乎很容易解释。不知道为什么需要更多解释。
  • @AzizSaleh:他现在编辑了它——最初只是“尝试使用 usort() 函数。”,没有更多,甚至没有指向手册的链接。
最近更新 更多