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>
接下来我们提交取到的值就是$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 分别为三种状态值,有更好方法欢迎补充.