合并Laravel集合结果,聚合一个字段

问题描述 投票:0回答:2

我有一个包含重复结果的集合,但相关字段中有不同的数据。我想消除重复项,但通过组合该字段的值来保留其他数据。我似乎找不到一个好的方法来做到这一点。我的结果集如下所示:

"bankers" => Collection {#663 ▼
  #items: array:5 [▼
    0 => Collection {#465 ▼
      #items: array:5 [▼
        "banker_id" => 13
        "banker_name" => "John Banker"
        "type" => "lending"
        "deal_score" => 1
      ]
    }
    1 => Collection {#455 ▼
      #items: array:5 [▼
        "banker_id" => 62667
        "banker_name" => "Harvey Aandreau"
        "type" => "lending"
        "deal_score" => 0
      ]
    }
    2 => Collection {#419 ▼
      #items: array:6 [▼
        "banker_id" => 13
        "banker_name" => "John Banker"
        "type" => "quotes"
        "deal_score" => 1
      ]
    }
    3 => Collection {#410 ▼
      #items: array:6 [▼
        "banker_id" => 297
        "banker_name" => "Melissa Jablonsky"
        "type" => "quotes"
        "deal_score" => 1
      ]
    }
  ]
}

我想删除第二个重复的“John Banker”,但将“type”字段的值添加到前一条记录中,例如:

"bankers" => Collection {#663 ▼
  #items: array:5 [▼
    0 => Collection {#465 ▼
      #items: array:5 [▼
        "banker_id" => 13
        "banker_name" => "John Banker"
        "type" => "lending, quotes"
        "deal_score" => 1
      ]
    }
    1 => Collection {#455 ▼
      #items: array:5 [▼
        "banker_id" => 62667
        "banker_name" => "Harvey Aandreau"
        "type" => "lending"
        "deal_score" => 0
      ]
    }
    3 => Collection {#410 ▼
      #items: array:6 [▼
        "banker_id" => 297
        "banker_name" => "Melissa Jablonsky"
        "type" => "quotes"
        "deal_score" => 1
      ]
    }
  ]
}

我需要保留当前的订单。如果需要,“type”字段可以更改为数组。任何建议将不胜感激。

laravel collect
2个回答
0
投票

感谢Joseph Silber提供以下建议:

$bankers->groupBy('banker_name')->map(function ($bankers) {
    return array_merge($banker[0]->all(), [
        'type' => $bankers->pluck('type')->implode(',');
    ]);
});

0
投票

put()

 链接到每个组的 
first()
 成员,以使用 
type
pluck()
 生成的逗号分隔值覆盖其 
implode()
 属性。使用 
values()
 重新索引数组(如果您不希望 
banker_name
 值作为第一级键。

代码:(

PHPize演示

var_export( $bankers ->groupBy('banker_name') ->map(fn($group) => $group->first()->put('type', $group->pluck('type')->implode(', '))) ->values() ->toArray() );
输出:

array ( 0 => array ( 'banker_id' => 13, 'banker_name' => 'John Banker', 'type' => 'lending, quotes', 'deal_score' => 1, ), 1 => array ( 'banker_id' => 62667, 'banker_name' => 'Harvey Aandreau', 'type' => 'lending', 'deal_score' => 0, ), 2 => array ( 'banker_id' => 297, 'banker_name' => 'Melissa Jablonsky', 'type' => 'quotes', 'deal_score' => 1, ), )
    
© www.soinside.com 2019 - 2024. All rights reserved.