您的位置:首页 > 编程语言 > PHP开发

php 位运算权限问题

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

<div class="row" style=" margin-left:24px;">
<input type="checkbox" id="player_state1" value="0" name="states[]" class="permission_item"  /> <label for="player_state1">可运行</label>
</div>
<br>
<div class="row" style=" margin-left:24px;">
<input type="checkbox" id="player_state2" value="1" name="states[]" class="permission_item"  /> <label for="player_state2">可写</label>
</div>
<br>
<div class="row" style=" margin-left:24px;">
<input type="checkbox" id="player_state3" value="2" name="states[]" class="permission_item"  /> <label for="player_state3">可读</label>
</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 分别为三种状态值,有更好方法欢迎补充.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: