jfcherng / php-mb-string
高性能的多字节字符串实现,适用于频繁的读取/写入操作。
2.0.1
2023-04-17 14:23 UTC
Requires
- php: >=8.1
- ext-iconv: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- phan/phan: ^5
- phpunit/phpunit: ^9 || ^10
Suggests
- ext-iconv: Either "ext-iconv" or "ext-mbstring" is requried.
- ext-mbstring: Either "ext-iconv" or "ext-mbstring" is requried.
README
高性能的多字节字符串实现,适用于频繁的读取/写入操作。
我为什么写这个包?
假设你有一个长的多字节字符串,你想要在它上面执行许多以下操作。
- 随机读取/写入,如
$char = $str[5];
或$str[5] = '许';
。 - 替换,如
str_replace($search, $replace, $str);
。 - 插入,如
substr_replace($insert, $str, $position, 0);
。 - 获取子串,如
substr($str, $start, $length);
。
因为PHP中的字符串不是UTF-8,为了安全地执行上述操作,你必须使用mb_*()
函数或者自己计算索引。频繁使用mb_*()
函数可能会造成性能损失,因为它每次调用时都必须根据给定的编码重新解码源字符串。字符串越长,问题越严重。
相反,这个类内部以UTF-32形式存储字符串,它是固定宽度的(1个字符始终占用4个字节),所以我们能够进行快速的随机访问。有了随机访问的能力,我们就可以使用str_*()
函数来内部执行这些任务。
安装
composer require jfcherng/php-mb-string
示例
基准测试
你用这个包做什么?
我开发这个包是为了一个PHP diff包,jfcherng/php-diff。