将对象添加到laravel集合中的指定位置

时间:2019-01-27 16:19:16

标签: laravel collections

我想在特定位置的laravel集合中添加一个新对象,有人可以帮助我实现这一目标吗?

例如:

“data”: [
 {
  “provider”: ‘datechanged’,
  “unogsdate”: “2019-01-25",
  “download”: 3
 }
 {
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }
 {
  “provider”: ‘datechanged’,
  “unogsdate”: “2019-01-27",
  “download”: 5
 }
 {
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }

我想基于记录在新日期的开始之前恰好添加新记录,例如就在日期unogsdate:2019-01-25开始之前,我想添加一个新记录, {   “ provider”:“ datechanged”,   “ unogsdate”:“ 2019-01-25”,   “下载”:3  } 如下例所示。...非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以完全使用Laravel Collections中可用的方法来完成此操作。

这就是我要做的:

  1. 我将按日期对数据进行分组。就您而言,unogsdate
  2. 然后我将使用each()遍历集合
  3. 这将使我能够prepend()包含我需要的数据的子集合。
  4. 最后,我将flatten()收藏。

这是一个例子:

$collection = collect([
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],

    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-27'
    ],

    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-27'
    ]
]);

return $collection->groupBy('unogsdate')
    ->each(function($value, $key) {
        return $value->prepend(
            (object) [
                'provider' => 'datechanged',
                'unogsdate' => $key,
                'downloads' => $value->count()
            ]
        );
    })
    ->flatten();

当然,我不知道您如何获取实际数据。但是,上面的集合类似于您当前的数据集。您可以轻松地将其重新应用到您的收藏夹。

另外,您可以在这里玩working example:)