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倍多~