按基于两列的集合排序

时间:2018-03-02 13:37:36

标签: php laravel collections

鉴于我有一个简单的集合

$collection = collect([
    ['product' => 'Desk', 'price' => 200, 'cost'=>250],
    ['product' => 'Chair', 'price' => 100, 'cost'=>200],
]); 

我只需要price - income来计算vuejs的收入,在这种情况下我会得到:

  
      
  1. -50
  2.   
  3. -100
  4.   

现在我想通过降序结果来命令,如:

  
      
  1. -100
  2.   
  3. -50
  4.   

想知道是否有办法在集合中订购?

1 个答案:

答案 0 :(得分:3)

您可以在Laravel中执行此操作,并将数据传递给视图(如果它是一个选项)。使用sortBy()sortByDesc()方法:

$asc = $collection->sortBy(function ($i) {
    return $i['price'] - $i['cost'];
});

$desc = $collection->sortByDesc(function ($i) {
    return $i['price'] - $i['cost'];
});

或者,您可以使用transform()方法向集合中添加新列,这样您就可以使用任何JS脚本对其进行排序:

$collection->transform(function ($i) {
    $i['difference'] = $i['price'] - $i['cost'];
    return $i;
});