php密钥$key,php – 如何KeyBy多个项目具有相同的密钥

在Laravel中,用户试图通过id键对查询结果进行分组,但遇到了keyBy()方法覆盖相同ID的问题。他们希望保留所有具有相同ID的记录,而不只是最后一个。目前的代码使用keyBy()和get()方法,导致只保留了最后一个匹配项。用户寻求一种方法,可能是一个自定义的keyBy实现,以避免覆盖并收集所有相关国家/地区。
摘要由CSDN通过智能技术生成

我正在使用Laravel Collections方法,并尝试通过id键入我的查询结果(这是一个集合).问题是我有多个具有相同ID的条目,但指向不同的国家/地区,我希望拥有所有值,而不仅仅是最后一个.

这是我到目前为止使用的代码:

$allCountries = new Collection($allCountries);

$offerCountries = $allCountries->keyBy('id');

dd($offerCountries);

foreach ($offer as $o) {

$o->countries = $allCountries->get($o->id);

}

为了解释,我的查询将结果放在$allCountries中,其中包含id和country,这些结果看起来像这样

id=>225, country=>US

id=>225, country=>IT

id=>3304, country=>NZ

只是为了给你一个快速的想法.我想通过导致$offerCountries的id来键入这个.然后我循环通过之前的Collection,其中包含具有与id的国家/地区结果相关的特定ID的商品.因此,对于报价225,它包含的国家是美国和IT.我遍历每个商品,并将countries对象设置为等于所有$allCountries id.我在这里遇到的问题是keyBy覆盖了值,只占用了最后一个.我希望得到这样的结果:

[

225 => countries: {'id' => 225, 'country' => 'US'}, {'id' =>

'225', 'country' => 'IT'}

3304 => ['id' => 3304, 'country' => 'NZ'],

]

是否有laravel方法来执行此操作,或者我是否需要编写自己的keyBy以便它不会覆盖.如果是这样,我该如何开始编写这个方法?

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值