• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

php的bitset模块介绍和安装

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

BitSet是C++标准库,提供了基于二进制数据位处理。这里不做深入展开。

php同样提供了一个可供选择的bitset第三方位操作库提供C++同样的功能,详见:http://pecl.php.net/package/Bitset

前段时间我厂需要完成一个判端手机号码归属地实现CRM系统外呼电话自动在外地手机号码前加0的功能。需求分析:在这种交互响应(接打电话程序响应时间不能超过0.01s)时间要求非常严格的系统中,利用传统的KEY-VALUE数据库查表操作显然是不能达到要求的(全国号段大约有30w数据,查找号码归属地相对较慢),这时候可以有两个选择的解决方案:一个是利用排序算法(比如二分查找法),但要求样本集先排序而维护这个无序的号码数据段是件很麻烦的事。另一个是利用基于位图和位向量处理。我们选择使用后者因为它比二分查找更快更方便。

我主要用到bitset的3个方法:

(1)bitset_empty(int bits) 分配位数组空间,并把每一位初始化为0,位数组长度为bitcount,实现很简单

len *= CHAR_BIT; output_str = emalloc( len+1 ); output_str[len] = '\0';
for(count = 0; count < len; count++ )
    output_str[count ] = ( (bitset_data[ count/CHAR_BIT ] >> (count % CHAR_BIT)) & 1 ) ? '1' : '0'; 

(2)bitset_incl(unsigned char *bitset_data, int bit) 位数组位置bit上的值置为1,实际操作就1行,不过位数组长度做成了动态的,所以还涉及erealloc之类的操作

bitset_data[ bit/CHAR_BIT ] |= 1 << (bit % CHAR_BIT);

(3)bitset_in(unsigned char *bitset_data, int bit) 判断某个位置bit上的值是否为1,位操作语句比较精炼

if( bitset_data[ bit/CHAR_BIT ] & (1 << (bit % CHAR_BIT) ) ) RETURN_TRUE;

linux下php的bitset模块安装方法:

phpize (该命令是用来准备 PHP 扩展库的编译环境的)
./configure
make
make install
在php.ini添加extension = [编译出来的bitsit.so的位置],重启WebServer即可

 

你可以接着阅读下一篇,利用php数组实现Bitset位处理模块功能


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php调用C代码的实现方法发布时间:2022-07-10
下一篇:
php数组转换成xml格式数据发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap