【问题标题】:Comparing associative arrays inside foreach loop laravel PHP比较foreach循环laravel PHP中的关联数组
【发布时间】:2023-03-26 05:00:01
【问题描述】:

使用 eloquent,我正在查询两组数据,如下所示:

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

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

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

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 不是数组

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

感谢您的帮助

【问题讨论】:

    标签: php laravel foreach


    【解决方案1】:

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

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

    另外,这里是不是一个错字:

    array_diff_assoc($all_perm, $role_perm);
    

    应该是$all_perms

    【讨论】:

      【解决方案2】:

      尝试使用可用于所有收藏的美妙 contains 方法:

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

      查看docs 以获取有关 contains 方法的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 2013-07-03
        相关资源
        最近更新 更多