2017-08-01 196 views
1

如何根据订单对$ 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); 
    } 
); 

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

回答

2

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

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

如果您的所有物品的类型都包含在$order中,这应该可以工作。如果没有,你会得到未定义的索引错误,这将弄乱排序。但是既然你没有指定这样的项目应该如何排序在你的问题,我假设他们都这样做。

+0

啊,你用过字典。这应该工作。 – rotaercz

+0

完美的作品。谢谢 – rotaercz

+0

不客气。 –

相关问题