【发布时间】:2020-03-10 13:54:20
【问题描述】:
我有一个 Laravel 集合,里面有很多类似的重复项:
[
id: 'NAME1',
prop1: 'yes',
prop2: null,
prop3: 'bla',
prop4: null
],
[
id: 'NAME1',
prop1: null,
prop2: 'yes'
prop3: null,
prop4: 'bla'
]
我想合并具有相同“id”属性的元素,并得到一个这样的集合,同时保留两个属性:
[
id: 'NAME1',
prop1: 'yes',
prop2: 'yes',
prop3: 'bla',
prop4: 'bla'
]
当我使用$collection->unique('id') 时,我只得到一个这样的集合,丢失了 prop2 和 prop4
第二个元素:
[
id: 'NAME1',
prop1: 'yes',
prop2: null,
prop3: 'bla',
prop4: null
]
我该如何解决?当元素之一具有空键时,我没有找到任何可以合并 Collection 元素的 Laravel Collections 方法。
【问题讨论】:
-
我认为集合上没有解决此问题的功能。您可能需要编写自己的函数。您可以
array_walk对集合进行比较并比较数组。 -
那么,如果不迭代所有元素就没有办法做到这一点?
-
我当然无法想象任何其他方式来做到这一点。您需要遍历第一个集合并从中构建一个结果集合,检查字段以填充非 NULL 值。而且,如果遇到多个非唯一值,您还必须决定该怎么做......例如,在 OP 中,如果(比如)第一条记录的
prop1是(比如)"no."所以,你自己设计的算法,适合你的目的。
标签: php laravel collections