我有两个位串,每个位长四位。
e.g.,
$role1BitString = '1010';
$role2BitString = '1001';
我想要他们,所以在这种情况下结果将是:
$bitString = '1011';
这是我的代码,但它调用substr八次。
$selectBit = (substr($role1BitString, RBAC::SELECT_BIT, 1) == '1' || substr($role2BitString, RBAC::SELECT_BIT, 1) == '1') ? '1' : '0' ;
$insertBit = (substr($role1BitString, RBAC::INSERT_BIT, 1) == '1' || substr($role2BitString, RBAC::INSERT_BIT, 1) == '1') ? '1' : '0' ;
$updateBit = (substr($role1BitString, RBAC::UPDATE_BIT, 1) == '1' || substr($role2BitString, RBAC::UPDATE_BIT, 1) == '1') ? '1' : '0' ;
$deleteBit = (substr($role1BitString, RBAC::DELETE_BIT, 1) == '1' || substr($role2BitString, RBAC::DELETE_BIT, 1) == '1') ? '1' : '0' ;
$bitString = $selectBit . $insertBit . $updateBit . $deleteBit;
此代码将在每次用户操作时执行数十次。这种最有效的方法是什么?
答案 0 :(得分:4)
使用具有bitshifting的实际int并使用按位或操作
使用intval($string, 2)
将二进制字符串转换为int,然后使用|
进行操作
答案 1 :(得分:1)
只需使用PHP的bitwise operator |
:
$bitString = $role1BitString | $role2BitString;