PHP从数组中删除除具有相同属性的对象外的所有对象
使用Eloquent,我想从$outputs数组中删除2个带有'Title'B的对象,并只保留一个 $outputs包含以下信息:PHP从数组中删除除具有相同属性的对象外的所有对象,php,laravel,eloquent,Php,Laravel,Eloquent,使用Eloquent,我想从$outputs数组中删除2个带有'Title'B的对象,并只保留一个 $outputs包含以下信息: [ { "Title": "A", "Publication date": "2013", }, { "Title": "B", "Publication date": "2010", }, { "Title": "B", "Pub
[
{
"Title": "A",
"Publication date": "2013",
},
{
"Title": "B",
"Publication date": "2010",
},
{
"Title": "B",
"Publication date": "2999",
},
{
"Title": "B",
"Publication date": "5555",
},
];
我知道有很多关于这方面的帖子,但我自己找不到一个方法。任何帮助都将不胜感激。您可以在查询中使用
destinct
和groupBy
来完成此操作 如果这是针对数组/集合的,而不是雄辩的查询,则可以使用collectionkeyBy
方法获取唯一值
$data=[
[
“标题”=>“A”,
“出版日期”=>“2013年”,
],
[
“标题”=>“B”,
“出版日期”=>“2010年”,
],
[
“标题”=>“B”,
“出版日期”=>“2999”,
],
[
“标题”=>“B”,
“出版日期”=>“5555”,
],
];
$collection=collect($data)->keyBy('Title');
然后您的输出将如下所示:
集合{#1389
#项目:阵列:2[
“A”=>数组:2[
“标题”=>“A”
“发布日期”=>“2013”
]
“B”=>数组:2[
“标题”=>“B”
“发布日期”=>“5555”
]
]
}
keyBy
方法将为每个标题提供集合中的最后一项,因此,如果要获取特定项,可以在调用keyBy
之前对集合进行排序:
//获取每个具有最高出版日期的标题
$collection=collect($data)->sortBy('publicationdate')->keyBy('Title');
//获取具有最低出版日期的每个标题
$collection=collect($data)->sortByDesc('publicationdate')->keyBy('Title');
如果要返回没有键“A”和“B”的数组,可以执行以下操作:
$collection=collect($data)->keyBy('Title')->values()->toArray();
输出:
数组:2[
0=>数组:2[
“标题”=>“A”
“发布日期”=>“2013”
]
1=>数组:2[
“标题”=>“B”
“发布日期”=>“5555”
]
]
请在此处发布您的疑问。只是让问题更清楚一些,以便理解。添加一些代码将是一个好主意@João dominguest这是我构建的一个数组,无法使用distinct,因为数据来自不同的源谢谢!我做了疯狂的循环试图移除/推送,尝试了一切。只有一行代码可以完成所有的事情,哈哈,谢谢。