如何在PHP中获取二进制数中“隐藏”的十进制数列表?
发布时间:2020-12-13 17:09:27 所属栏目:PHP教程 来源:网络整理
导读:首先,我非常抱歉我写的这个问题写得不好.所以请用英语为母语的人适当改变标题.我的问题很简单,如下: 我使用整数来存储多个类型的一个项目.例如: TYPE A = 1TYPE B = 2TYPE C = 4TYPE D = 8TYPE E = 16etc... 现在DB中的项目具有类型值14,这意味着它已被分
首先,我非常抱歉我写的这个问题写得不好.所以请用英语为母语的人适当改变标题.我的问题很简单,如下:
我使用整数来存储多个类型的一个项目.例如: TYPE A = 1 TYPE B = 2 TYPE C = 4 TYPE D = 8 TYPE E = 16 etc... 现在DB中的项目具有类型值14,这意味着它已被分配给TYPE B C D.如果它具有例如9的类型值,则意味着它已被分配给TYPE A D. 我需要一个函数,我将提供单一类型的整数,这个函数将返回整数类型的数组. 我可以迭代所有整数并将它们与数字进行比较,但这就是我现在使用的,但我正在寻找一些更有效的方法,如果它存在的话? 在此先感谢您的帮助. 解决方法
这是一个没有任何循环的函数(主要是为了它的乐趣:) :):
function getTypes($int) { $types = array('Type A','Type B','Type C','Type D','Type E');//defining types $t = array_reverse(str_split(decbin($int)));//converting $int to an array of bits $types = array_slice($types,ceil(log($int,2)));//slicing the array to the same size as number of bits in the $int $t = array_combine($types,$t);// Creating a new array where types are keys and bits are values return array_keys($t,1);// returning an array of keys which have a value of 1 } 然而,这并不意味着它是有效的.如果使用位掩码,最好使用按位和(&)等按位运算符检查值. if ($integer & 8 & 16) 为了检查每个单独的类型,我将使用bitshift运算符循环 function getTypes($int) { $result = array(); $types = array('Type A','Type E'); foreach($types as $type) { if ($int & 1)//checking if last bit is 1 (exactly the same as if($int%2) ) $result[]=$type; $int>>=1;//shifting integer's bits to the right (exactly the same as $int = $int / 2) } return $result; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |