【问题标题】:Order by a collection based on two columns按基于两列的集合排序
【发布时间】:2018-03-02 13:37:36
【问题描述】:

鉴于我有一个简单的收藏

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

我通过简单的price - income来计算vuejs中的收入,在这种情况下我会得到:

  1. -50
  2. -100

现在我想按以下结果排序:

  1. -100
  2. -50

想知道是否有一种方法可以在集合本身中进行排序?

【问题讨论】:

    标签: php laravel collections


    【解决方案1】:

    如果可以的话,您可以在 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;
    });
    

    【讨论】:

    • 我试过 `return $tableRows->sortByDesc(function ($row) { return $row['price'] - $row['cost']; })` 但它不起作用
    • @PrStandup 刚刚使用您之前显示的数据尝试了您刚刚显示的代码,它对我有用。您可能认为-50 小于-100,但事实并非如此。所以,也许你想通过将sortBy 替换为sortByDescsortByDesc 替换为sortBy 来反转它的逻辑
    • 实际上它正在工作但不显示,因为它添加了“0”:{data},“1”:{data}我如何删除键
    • @PrStandup 删除键添加->values()
    • 我就是这么做的,太棒了:)
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2021-04-22
    • 2012-12-08
    • 2013-02-05
    相关资源
    最近更新 更多