如何使用数组顺序对此Collection进行排序?

时间:2017-08-01 21:57:27

标签: php laravel collections

如何根据订单对$ item类型进行排序?这就是我目前所拥有的:

$order = ['AA', 'zl', 'Dr', 'co', 'og'];

$items->sort(
    function ($a, $b) use ($order) {
        return strcmp($b->type, $a->type) // how do I apply the order here?
            ?: strcmp($b->date, $a->date);
    }
);

基本上它是一个两列排序,它首先按类型排序,然后按日期排序。该类型将使用数组顺序而不是典型的字母顺序进行排序。

1 个答案:

答案 0 :(得分:2)

您可以比较$order中与每个项目类型对应的键。

    return ($order[$b->type] - $order[$a->type]) 
           ?: strcmp($b->date, $a->date);

如果您的所有商品都包含$order中的类型,则此功能应该有效。如果没有,你将得到未定义的索引错误,这将搞乱排序。但是,由于你还没有指明在你的问题中如何对这类项目进行排序,我假设他们都这样做了。