首页 > 解决方案 > 检查一个数组中的任何项是否包含在另一个数组中的任何项中

问题描述

我有一系列订阅/计划(访问级别):

define('PLAN_A', 0); // 0001    
define('PLAN_B', 2); // 0010        
define('PLAN_C', 4); // 0100        
define('PLAN_D', 8); // 1000        
define('PLAN_E', 16); // 10000

用户可以订阅一个或多个计划。

$user_one = array(PLAN_A, PLAN_C); // is subscribed to two plans
$user_two = array(PLAN_C);         // is only subscribed to one plan

一个“流程”需要一个特定的订阅计划级别 - 或多个计划级别:

$process_1 = array(PLAN_B); // requires only PLAN_B subscripton
$process_2 = array(PLAN_B, PLAN_D); // requires either PLAN_B or PLAN_C subscription

我想检查是否$user_one有'权限'访问$process_1,并单独检查是否$user_one有权访问 $ process_2。并对$user_two. (“权限”是指用户是否拥有流程所需的订阅计划。)

看起来我需要检查流程的订阅要求中是否包含任何用户计划订阅(一个或多个)。

我尝试使用按位检查(这就是 PLAN 具有二进制值的原因),但这仅适用于$process_1. 如何检查是否$user_1可以访问$process_2?或者,如何检查用户数组的任何值是否包含在流程需求数组的任何值中?

标签: phparraysprivileges

解决方案


您可以使用一些功能来完成这项工作,如下所示:

function UserPlanHaveRequiredSub($user_plans,$process): bool
    {
    foreach($user_plans as $plan){
        if (in_array($plan,$process)){
            return true;
        }
    }
    return false;
   }

然后你可以像这样传递用户计划和过程:

$result = UserPlanHaveRequiredSub($user_one,$process_2 );
var_dump($result);// will return true or false .

推荐阅读