定制 buexplain/roaring 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

buexplain/roaring

最新稳定版本:v3.0.3

Composer 安装命令:

composer require buexplain/roaring

包简介

基于“https://github.com/RoaringBitmap/CRoaring”给php提供完善的bitmap操作能力

README 文档

README

基于https://github.com/RoaringBitmap/CRoaring实现的php版本bitmap

安装

composer require buexplain/roaring

示例

require "vendor/autoload.php";
use Roaring\Bitmap;

//求并集
$a = new Bitmap();
$b = new Bitmap();
$a->addMany([1, 2]);
$b->addMany([2, 3]);
$c = $a->or($b);
print_r($c->toArray()); //[1, 2, 3]

//求交集
$a = new Bitmap();
$b = new Bitmap();
$a->addMany([1, 2, 3]);
$b->addMany([2, 3, 4]);
$c = $a->and($b);
print_r($c->toArray()); //[2, 3]

//求差集
$a = new Bitmap();
$b = new Bitmap();
$a->addMany([1, 2, 3]);
$b->addMany([1, 3, 4]);
$c = $a->andNot($b);
print_r($c->toArray()); //[2]

//求对称差集
$a = new Bitmap();
$b = new Bitmap();
$a->addMany([1, 2, 3]);
$b->addMany([3, 4, 5]);
$c = $a->xOr($b);
print_r($c->toArray()); //[1, 2, 4, 5]

//批量迭代整个bitmap
$a = new Bitmap();
$a->addRange(0, 100);
$generator = $a->iterate(10);
foreach ($generator as $v) {
    print_r($v); //每次循环最多获取10个值
}

注意事项

PHP的整型数 int 的字长和平台有关, PHP 不支持无符号的 int,基于这个原因,要注意以下两点:

  1. 使用64位的bitmap时,能写入的最大值是PHP_INT_MAX常量值。
  2. 当反序列化的数据来自其它语言的实现时,因为php对uint64支持范围不完整,所以可能会出现异常情况,这一点尤其要注意。

centos下安装php的ffi扩展

编译安装

/usr/local/bin/php8.2.10/bin/phpize
./configure --with-php-config=/usr/local/bin/php8.2.10/bin/php-config
make && make install

打开配置文件中的ffi扩展开关

php --ini
vi /usr/local/bin/php8.2.10/etc/php.ini

错误解决

  1. No package 'libffi' found,执行命令:yum install libffi-devel
  2. 错误:只允许在 C99 模式下使用‘for’循环初始化声明,升级gcc

特别感谢

感谢https://github.com/M31ayu同学review代码、提供darwin、arm64的编译机器。

统计信息

  • 总下载量: 33
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 1
  • 开发语言: C

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2025-09-24