我有两个数组,$user_roles
和$global_roles
。我想制作一个新数组,我们称之为$available_roles
,在$global_roles
中将项目等同于$user_roles
中的项目,而不是$available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);
我有以下代码来执行普通数组。 {{1}}
由于Laravel在执行查询时不使用传统数组,因此使用Eloquent Collections,这被证明是有问题的。
你们有什么其他想法?
答案 0 :(得分:16)
这很简单。您可以使用Collection merge
方法:
$available_roles = $global_roles->merge($user_roles);
因为merge
内部使用了一个使用id作为键的关联数组(字典),所以这应该会自动删除重复项。
无论如何,您可以使用unique
删除集合中的重复项:
$uniqueCollection = $collection->unique();
现在那是合并你实际上正在寻找的是两个集合之间的差异。您可以通过两种方式执行此操作:
$available_roles = $user_roles->diff($global_roles);
或
$available_roles = $global_roles->except($user_roles->modelKeys());