PHP中的位操作和MySQL检索
发布时间:2020-12-13 22:00:09 所属栏目:PHP教程 来源:网络整理
导读:我试图优化我的 mysql表一点点,以便有一个稍微更易于管理的表.我想将用户权限存储在位字段中. 例如,用户权限可能是0110(我的用户权限越来越多,所以这个长度可能会长一些) 该示例可能对应于以下内容: 0:用户无法在网站上发布新闻 1:用户可以在网站上发布新
我试图优化我的
mysql表一点点,以便有一个稍微更易于管理的表.我想将用户权限存储在位字段中.
例如,用户权限可能是0110(我的用户权限越来越多,所以这个长度可能会长一些) 该示例可能对应于以下内容: 0:用户无法在网站上发布新闻 如果我将它存储在mysql位字段中.我怎样才能在PHP中操作它? 例如,在PHP中有一种简单的方法来获取第3位并查看它是0还是1? 有没有一种简单的方法可以将第3位设置为0或1? 解决方法
你可以使用
bitwise operators.
例如 : $bits = bindec('0110'); var_dump($bits & bindec('0100')); 将得到“4”(即非零 – 你可以认为是“ok”),因为$bits中的第三位被设置. 而且: $bits = bindec('0010'); var_dump($bits & bindec('0100')); 会得到0 – 因为$bits中的第三位未设置. 当然,每次都不需要调用bindec – 我只是在这里使用它来使事情更容易阅读;我的第一个例子可以改写成这样的东西: $bits = bindec('0110'); var_dump($bits & 1<<2); 为了使代码更容易理解,不要使用这样的魔术值,而是使用一些常量;例如 : define('PERMISSION_TO_DO_X',1); define('PERMISSION_TO_DO_Y',1<<1); define('PERMISSION_TO_DO_Z',1<<2); 并使用它们: $bits = bindec('0110'); if ($bits & PERMISSION_TO_DO_X) { echo "OK to do X<br />"; } if ($bits & PERMISSION_TO_DO_Y) { echo "OK to do Y<br />"; } if ($bits & PERMISSION_TO_DO_Z) { echo "OK to do Z<br />"; } 在这里,你可以得到那种输出: OK to do Y OK to do Z 因为: >最右边的位为0(未授予权限X)>第二位(从右侧开始)为1:授予Y权限>第三位(仍然始终从右边开始)是1:授予Z权限 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |