本篇博文是对上一篇博客将中英文混合字符串分解为固定长度(一个英文算一个位置,一个中文算两个位置)的字符串数组的优化,将不足一行的字符串直接返回,最后一行的字符串不做遍历,直接拼接到最后一行
function cutCharacters($string = '', $length = 24) {
$num = 1;
$t = 0;
$x = 1;
$result = [['count'=>0,'str'=>'']];
$strlen = mb_strlen($string,"UTF-8");
//字符串长度不够直接返回
$templen = strlen($string);
$strlenT = $strlen + ($templen-$strlen)/2;
if($strlenT <= $length){
return [1,$string];
}
//大概字符串该截取的行数
$count = ceil($strlenT / $length);
while ($strlen && $x < $count) {
$array[$t] = mb_substr($string, 0, 1, "UTF-8");
$string = mb_substr($string, 1, $strlen, "UTF-8");
$strlen = mb_strlen($string);
if ($result[($x - 1)]['count'] >= $length) {
$x++;
$num++;
$result[($x - 1)]['count'] = 0;
$result[($x - 1)]['str'] = '';
}
if (strlen($array[$t]) > 1) {
/** 一个汉字占两个位置 **/
$result[($x - 1)]['count'] += 2;
} else {
$result[($x - 1)]['count'] += 1;
}
if ($x == 1) {
$result[($x - 1)]['str'] .= $array[$t];
} else {
$result[($x - 1)]['str'] .= $array[$t];
}
$t++;
}
$result[count($result)-1]['str'] .= $string;//省却最后一行字符串截取拼接
return [count($result),array_column($result,'str')];
}