2016-12-01 60 views
1

使用侃侃而谈,我查询两组数据,像这样:比较foreach循环laravel PHP中关联数组

$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(): Argument #1 is not an array

他们是这样做的更好的方法?或者我能做些什么来使它工作?

感谢您的任何帮助

回答

2

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

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

此外,这是一个错字这里:

array_diff_assoc($all_perm, $role_perm); 

应该$all_perms

0

尝试使用妙包含方法可用于所有系列:

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

结帐t他docs寻求包含方法的帮助。