比较foreach循环laravel PHP中的关联数组

时间:2016-12-01 09:10:39

标签: php laravel foreach

使用eloquent,我正在查询两组数据:

$all_perms = Permission::all(); //all permissions
$role_perms = Auth::user()->roles()->permissions; //permissions belonging to a role

$role_perms$all_perms的一个子集,我想要的是循环两个数组并推出一个新数组,其中包含已分配给角色的所有权限以及尚未分配给角色的权限

我所做的是在foreach循环中循环遍历两个数组,如果任何一个数组属于两个集合,我通过向数组添加一个check键和相应值1来标记它,以便我可以识别作为已分配给角色的权限。

foreach ($role_perms as $role_perm) {
    foreach ($all_perms as $key => $value ) {
        if (array_diff_assoc($all_perm, $role_perm)) {
            $all_perm['check'] = 1; 
        }
    }
}

但它一直在抛出错误:

  

array_diff_assoc():参数#1不是数组

他们是更好的方法吗?或者我可以在这个上做些什么来使它工作?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

那是因为它是一个集合,而不是一个数组。如果您想获得数组,请尝试使用toArray()

$all_perms = Permission::all()->toArray();

此外,这是一个错字:

array_diff_assoc($all_perm, $role_perm);

应为$all_perms

答案 1 :(得分:0)

尝试使用所有馆藏中提供的精彩包含方法:

foreach ($role_perms as $role_perm) {
   if($all_perms->contains($role_perm))
   {
      // do whatever is needed
   }
}

使用contains方法查看docs以获取帮助。