PHP:最有效的按位OR方式

时间:2013-12-10 17:00:24

标签: php performance

我有两个位串,每个位长四位。

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;  

此代码将在每次用户操作时执行数十次。这种最有效的方法是什么?

2 个答案:

答案 0 :(得分:4)

使用具有bitshifting的实际int并使用按位或操作

使用intval($string, 2)将二进制字符串转换为int,然后使用|进行操作

答案 1 :(得分:1)

只需使用PHP的bitwise operator |

$bitString = $role1BitString | $role2BitString;