Php 在laravel中合并两个集合
需要合并两个集合Php 在laravel中合并两个集合,php,laravel-5,laravel-query-builder,Php,Laravel 5,Laravel Query Builder,需要合并两个集合 $combined = $firstCollection->merge($secondCollection) 我有两个集合,需要将它们合并到一个集合中 这些集合是使用Eloquent的两个查询的输出 第一个结果如下所示: Collection {#350 #items: array:2 [ 0 => {#342 +"id": 1 +"code": "C000215" +"name": "Mostafa Mohamed
$combined = $firstCollection->merge($secondCollection)
我有两个集合,需要将它们合并到一个集合中
这些集合是使用Eloquent的两个查询的输出
第一个结果如下所示:
Collection {#350
#items: array:2 [
0 => {#342
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 1
+"CommunicationCount": 0
}
1 => {#337
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 2
+"CommunicationCount": 0
}
]
}
Collection {#350
#items: array:2 [
0 => {#346
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
1 => {#340
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
]
}
第二个查询结果如下:
Collection {#350
#items: array:2 [
0 => {#342
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 1
+"CommunicationCount": 0
}
1 => {#337
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 2
+"CommunicationCount": 0
}
]
}
Collection {#350
#items: array:2 [
0 => {#346
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
1 => {#340
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
]
}
我使用此代码合并了这两个集合
$combined = $firstCollection->merge($secondCollection)
我期望低于产量
Collection {#350
#items: array:2 [
0 => {#346
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 1
+"CommunicationCount": 0
+"CoachServiceAmount": 0.0
}
1 => {#340
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 2
+"CommunicationCount": 0
+"CoachServiceAmount": 0.0
}
]
}
但我得到了这个输出
Collection {#350
#items: array:4 [
0 => {#342
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 1
+"CommunicationCount": 0
}
1 => {#337
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceCount": 0
+"CourseServiceCount": 2
+"CommunicationCount": 0
}
2 => {#346
+"id": 1
+"code": "C000215"
+"name": "Mostafa Mohamed Bayomi"
+"mobile1": "01228902157"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
3 => {#340
+"id": 2
+"code": "C000216"
+"name": "Sayed Mohamed Bayomi"
+"mobile1": "01228902158"
+"mobile2": ""
+"CoachServiceAmount": 0.0
}
]
}
问题
包含以下文本:
merge方法将给定数组或集合与原始集合合并。如果给定项中的字符串键与原始集合中的字符串键匹配,则给定项的值将覆盖原始集合中的值(…)如果给定项的键是数字的,则值将追加到集合的末尾
这意味着merge()
不会像您预期的那样工作,因为您使用的是数字键
解决方案1:非数字键
您的问题的一个解决方案是使用非数值作为数组键,此解决方案仅在所选字段(示例中的code
是主键)为主键时有效:
keyBy方法按给定的键为集合设置键。如果多个项目具有相同的键,则新集合()中将只显示最后一个项目
values方法返回一个新集合,其中键重置为连续整数()
解决方案2:压缩
如果两个集合中的元素数量和顺序相同,则可以执行以下操作:
$combined = $firstCollection->zip($secondCollection);
zip方法将给定数组的值与相应索引()处的原始集合的值合并在一起
来自merge()的文档:如果给定项的键是数字的,那么这些值将附加到集合的末尾。HTHdo您的意思是只有当值为整数时它才会工作?您的项键为整数(0、1、2等),这意味着当您合并时,它将导致一个集合附加到另一个集合的末尾