php 位运算权限问题

权限问题比如:linux角色权限 可读 可写 可运行 ,权限二进制分别是100 010 001,十进制就是4 2 1,数据库权限字段若为state 默认为0,通常权限都是多选框形式,如下图:

 1 <div class="row" style=" margin-left:24px;">
 2     <input type="checkbox" id="player_state1" value="0" name="states[]" class="permission_item"  /> <label for="player_state1">可运行</label>
 3 </div> 
 4 <br>
 5 <div class="row" style=" margin-left:24px;">
 6     <input type="checkbox" id="player_state2" value="1" name="states[]" class="permission_item"  /> <label for="player_state2">可写</label>
 7 </div>
 8 <br>
 9 <div class="row" style=" margin-left:24px;">
10     <input type="checkbox" id="player_state3" value="2" name="states[]" class="permission_item"  /> <label for="player_state3">可读</label>
11 </div>
View Code

接下来我们提交取到的值就是$query['state'],是一个数组,array([0] => 1 [1] => 2 ),接下来就应该修改权限值,首先要获取一个值,这个值就要用到位运算 <<, 每次左移都乘以2

if (!empty($query['states'])) {
      foreach ($query['states'] as $t) {
             $currstate |= (1 << ($t));  //位运算  循环遍历 
        printf_r($currstate); } }

本来$currstate 输出值为2 6, 6便是这个最终的状态值

而如果想要获取当前的状态,如

//$CharState 为获取到的数据库值
$state1 = $CharState & 0x1;
$state2 = $CharState & 0x2;
$state3 = $CharState & 0x4;

这的&

得到的$state1 $state2 $state3 分别为三种状态值,有更好方法欢迎补充.
原文地址:https://www.cnblogs.com/danche/p/4829872.html