使用Laravel Collection获取重复值

时间:2016-11-30 12:17:13

标签: php laravel laravel-5 laravel-5.2 laravel-5.3

我不想删除重复的值,我想获取articles_id重复项并将其数量值相加,例如,这是我的集合:

Collection {#306 ▼
  #items: array:3 [▼
    0 => CartLine {#294 ▼
      +quantity: 2
      +article_id: 1728
      +article_name: "TAZA CERAMICA"
    }
    1 => CartLine {#296 ▼
      +parent_line_id: null
      +quantity: 1
      +article_id: 1728
      +article_name: "TAZA CERAMICA"
    }
    2 => CartLine {#298 ▼
      +quantity: 1
      +article_id: 1378
      +article_name: "JARRA CERVEZA ALEMANA"

    }
  ]
}

我希望得到这个结果:

Collection {#306 ▼
  #items: array:3 [▼
    0 => CartLine {#294 ▼
      +quantity: 3 //sum total quantity of the duplicates elements with same article_id
      +article_id: 1728
      +article_name: "TAZA CERAMICA"
    }
    1 => CartLine {#296 ▼
      +parent_line_id: null
      +quantity: 3
      +article_id: 1728
      +article_name: "TAZA CERAMICA"
    }
    2 => CartLine {#298 ▼
      +quantity: 1
      +article_id: 1378
      +article_name: "JARRA CERVEZA ALEMANA"

    }
  ]
}

我想要对重复元素的数量求和,并使用这些元素中的总和设置数量属性。

2 个答案:

答案 0 :(得分:7)

我知道这个答案已被接受,但我刚刚在搜索同样的东西时发现了这个StackOverflow帖子。我最终做的是以下内容。

$users = Users::all();
$usersUnique = $users->unique('id');
$usersDupes = $users->diff($usersUnique);

dd($users, $usersUnique, $usersDupes);

我只需要一次性用途,所以如果你需要在生产页面上使用它,我不确定它的性能如何。

答案 1 :(得分:5)

您可以尝试以下方式:

$collection->groupBy('article_id')->flatMap(function ($items) {

    $quantity = $items->sum('quantity');

    return $items->map(function ($item) use ($quantity) {

        $item->quantity = $quantity;

        return $item;

    });

});

显然,将$collection更改为您称为保存集合的变量的任何内容。

希望这有帮助!