使用Eloquent,我想从带有‘$outputs’B的标题数组中删除两个对象,只保留一个。
$outputs包含以下信息:
[
{
"Title": "A",
"Publication date": "2013",
},
{
"Title": "B",
"Publication date": "2010",
},
{
"Title": "B",
"Publication date": "2999",
},
{
"Title": "B",
"Publication date": "5555",
},
];
我知道有很多关于这方面的帖子,但我自己找不到一种方法。任何帮助都将不胜感激。
发布于 2019-06-26 10:23:42
如果这是用于数组/集合,而不是雄辩的查询,则可以使用集合keyBy
方法来获取唯一值。
https://laravel.com/docs/5.8/collections#method-keyby
$data = [
[
"Title" => "A",
"Publication date" => "2013",
],
[
"Title" => "B",
"Publication date" => "2010",
],
[
"Title" => "B",
"Publication date" => "2999",
],
[
"Title" => "B",
"Publication date" => "5555",
],
];
$collection = collect($data)->keyBy('Title');
然后您的输出将如下所示:
Collection {#1389
#items: array:2 [
"A" => array:2 [
"Title" => "A"
"Publication date" => "2013"
]
"B" => array:2 [
"Title" => "B"
"Publication date" => "5555"
]
]
}
对于每个标题,keyBy
方法将为您提供集合中的最后一项,因此,如果要获取特定项,可以在调用keyBy
之前对集合进行排序:
// get each Title with the highest Publication date
$collection = collect($data)->sortBy('Publication date')->keyBy('Title');
// get each Title with the lowest Publication date
$collection = collect($data)->sortByDesc('Publication date')->keyBy('Title');
如果你想返回一个没有键"A“和"B”的数组,你可以这样做:
$collection = collect($data)->keyBy('Title')->values()->toArray();
输出:
array:2 [
0 => array:2 [
"Title" => "A"
"Publication date" => "2013"
]
1 => array:2 [
"Title" => "B"
"Publication date" => "5555"
]
]
发布于 2019-06-26 08:44:58
您可以通过在查询中使用destinct
和groupBy
来完成此操作。
https://stackoverflow.com/questions/56763610
复制相似问题