I have two arrays,
$global_roles. I want to make a new array, let’s call it
$available_roles, where it can be equated as the items in
$global_roles less the items in the
I have the following code to do it to a normal array.
$available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);
This is proving to be problematic due to the fact that Laravel does not use traditional arrays when one executes a query, it uses Eloquent Collections.
What other ideas do you guys have?
This is fairly simple. You can use the Collection’s
$available_roles = $global_roles->merge($user_roles);
merge internally uses an associative array (dictionary) that uses the id as key, this should automatically remove duplicates.
Anyways though, you can remove duplicates in a collection using
$uniqueCollection = $collection->unique();
Now that was for merging what you’re actually are looking for is the difference between two collections. You can do this in two ways:
$available_roles = $user_roles->diff($global_roles);
$available_roles = $global_roles->except($user_roles->modelKeys());