将中英文混合字符串分解为固定长度的字符串数组

本篇博文是对上一篇博客将中英文混合字符串分解为固定长度(一个英文算一个位置,一个中文算两个位置)的字符串数组的优化,将不足一行的字符串直接返回,最后一行的字符串不做遍历,直接拼接到最后一行

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')];
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值