我有以下收藏
Collection {#430 ▼
#items: array:54 [▼
0 => {#435 ▼
+"name": "Persona 5"
+"cover": "cover_persona-5_playstation-3.png"
+"bio": "This is a syno"
+"all_nb_rank": null
+"platform_name": "Sony Playstation 3"
+"tag_name": "RPG"
+"developper": "Deep Silver"
+"publisher": "Atlus"
}
1 => {#437 ▼
+"name": "Persona 5"
+"cover": "cover_persona-5_playstation-3.png"
+"bio": "This is a syno"
+"all_nb_rank": null
+"platform_name": "Sony Playstation 3"
+"tag_name": "Turn based"
+"developper": "Deep Silver"
+"publisher": "Atlus"
}
2 => {#436 ▼
+"name": "Persona 5"
+"cover": "cover_persona-5_playstation-3.png"
+"bio": "This is a syno"
+"all_nb_rank": null
+"platform_name": "Sony Playstation 3"
+"tag_name": "Simulation"
+"developper": "Deep Silver"
+"publisher": "Atlus"
}
//
我想进入另一个集合“tag_name”行,然后从主集合中删除它,并删除重复值以获得类似这样的内容:
Collection {#430 ▼
#items: array:1 [▼
0 => {#435 ▼
+"name": "Persona 5"
+"cover": "cover_persona-5_playstation-3.png"
+"bio": "This is a syno"
+"all_nb_rank": null
+"platform_name": "Sony Playstation 3"
+"developper": "Deep Silver"
+"publisher": "Atlus"
}
Collection {#490 ▼
#items: array:3 [▼
0 => "RPG"
1 => "Turn based"
2 => "Simulation"
]
}
我已经设法通过
将“tag_name”行放到另一个Collection中$tags = $collection->pluck('tag_name');
我还计划使用unique()集合方法来合并重复值。
但我不知道如何处理以从主集合中删除“tag_name”。
我尝试使用forget()和slice()方法,但它不起作用。我知道我可以把它变成一个简单的数组,然后使用PHP unset()函数,但我想知道如何使用Laravel Collection方法做到这一点
答案 0 :(得分:0)
您可以使用forget()
做一个小技巧,因为forget()
仅适用于集合对象。
$collections = $collections->map(function ($c) {
return collect($c)->forget('tag_name');
});
return $collections;
答案 1 :(得分:0)
分区方法可用于根据真实测试的逻辑将集合分成一个或多个集合。将它与list方法一起使用,如下例所示:
https://laravel.com/docs/5.5/collections#method-partition
另一个选项是mapToGroups方法。
答案 2 :(得分:0)
变异收集,我认为是一种不好的做法。您从上面的收藏中需要什么样的数据?如果您想要一个包含被拒绝数据的新集合。然后拒绝可能是一个解决方案。
答案 3 :(得分:-1)
except()方法正是您所需要的。它从集合中删除一个或多个键:
$persona = collect([
'name' => 'Persona 5',
'cover' => 'cover_persona-5_playstation-3.png',
'bio' => 'This is a syno',
'all_nb_rank": nul',
'platform_name' => 'Sony Playstation 3',
'tag_name' => 'RPG',
'developper' => 'Deep Silver',
'publisher' => 'Atlus'
]);
$result = $persona->except(['tag_name']);
$personasWithOutTagName = $personas->except(['tag_name']);
这将导致:
[
'name' => 'Persona 5',
'cover' => 'cover_persona-5_playstation-3.png',
'bio' => 'This is a syno',
'all_nb_rank": nul',
'platform_name' => 'Sony Playstation 3',
'developper' => 'Deep Silver',
'publisher' => 'Atlus'
];
对角色集合中的所有项目执行此操作,您可以执行以下操作:
$result = $personas->map(function ($person) {
return collect($person)->except(['tag_name'])->all();
});
$result
将是除tag_name
键以外的所有角色的集合。