使用数组中的值进行PHP in_array搜索

时间:2019-01-14 15:11:45

标签: php

我有一个数据库调用,该数据库调用向我提供了用户可以在特定页面上访问的roles列表。使用此许可权数据可以保护我的逻辑。

我正在尝试找出如何检查用户角色是否存在于允许看到该数据的一系列角色中。

示例代码:

$roles = ['User', 'Admin', 'HR'];
$userRoleFromDB = 'Admin';

...
// Check to see if the user has the Admin Role
<?php if (in_array($userRoleFromDB, $roles))){?>
  Secret Stuff Here
<?php } ?>

如果我检查用户是否具有Admin角色,则上述代码可以正常工作,但我试图弄清楚如何针对数组检查多个角色。

$roles = ['User', 'Admin', 'HR'];
$userRoleFromDB = ['Admin', 'HR'];

...
// Check to see if the user has the Admin OR HR Role
<?php if (in_array($userRoleFromDB, $roles))){?>
  Secret Stuff Here
<?php } ?>

是否存在类似于in_array的东西,可以进行两个数组的检查?

1 个答案:

答案 0 :(得分:3)

您可以使用array_intersect(),然后检查匹配角色的数量是否大于0。

$matching_roles = array_intersect($roles, $userRoleFromDB);
if(count($matching_roles) > 0) { ?>

    Secret Stuff Here

<?php }

另外,在IF语句中使用空数组将返回false,而使用具有任何值的数组将返回TRUE,因此您也可以这样做:

$matching_roles = array_intersect($roles, $userRoleFromDB);
if($matching_roles) { ?>

    Secret Stuff Here

<?php }

或者,您可以在循环内对其进行检查。

foreach($userRoleFromDB as $role) {
    if(in_array($role, $roles)) { ?>

        Secret Stuff Here

        <?php break;
    }
}

在循环内,使用in_array()检查变量是否在数组中,并在执行break;之后使用Secret Stuff Here结束循环,因此不会多次执行