php 指定长度的数组,PHP 将 UTF-8 的 字符串 依 指定长度 切割成数组(str_split 的 UTF-8版)...

本文探讨了PHP中str_split()函数在处理UTF-8字符串时的局限性,并提供了两种替代方案:str2_split()和utf8_str_split()。通过速度测试,utf8_str_split()被证明在处理UTF-8字符串时更高效。这些函数对于正确分割多字节字符的字符串至关重要,特别是在进行中文字符串处理时。
摘要由CSDN通过智能技术生成

PHP 的 str_split() 的功能、使用方式 如下:

$str = 'Hello';

print_r(str_split($str)); // array('H', 'e', 'l', 'l', 'o')

print_r(str_split($str, 3)); // array('Hel', 'lo')

?>

str_split() 可以将 字符串 依 需要的长度 做分割, 但是对 UTF-8 的中文, 就无法切依需要的长度来做切割, 要自己另外处理.

注: 下述程序 使用方法 都跟 str_split() 一样.

str2_split(): mb_strlen() + mb_substr()

直觉的使用 mb_strlen() + mb_substr() 来写 UTF-8 版, 对于文本短的状况, 速度都还够快.

function str2_split($string, $split_len = 1)

{

$len = mb_strlen($string, 'UTF-8');

if ($len > $split_len || !$split_len) {

for ($i = 0; $i < $len; $i++) {

$parts[] = mb_substr($string, 0, $split_len, 'UTF-8');

$string  = mb_substr($string, $split_len, $len, 'UTF-8');

}

} else {

$parts = array($string);

}

return $parts;

}

?>

utf8_str_split() - 取自 Joomla - pasamio

后来想想, 这个应该早就有人写过, 而且一定比上面的好又快, 于是找找 str_split utf-8, 第一笔就找到 Joomla 的 utf8_str_split(). XD

/**

* @version $Id: str_split.php 10381 2008-06-01 03:35:53Z pasamio $

* @package utf8

* @subpackage strings

*/

function utf8_str_split($str, $split_len = 1)

{

if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1)

return FALSE;

$len = mb_strlen($str, 'UTF-8');

if ($len <= $split_len)

return array($str);

preg_match_all('/.{'.$split_len.'}|[^\x00]{1,'.$split_len.'}$/us', $str, $ar);

return $ar[0];

}

?>

速度测试

将这两个 function 各跑 10000次, 看看所使用的时间, 很明显 utf8_str_split() 比 str2_split() 快了 3倍多~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值