欢迎您光临本站
首页 > PHP > 正文
faddei头像
faddei

2021-07-10

评论者
PHP
0 1

原字符串样式:

$str = 'IT基地59zone.com交流平台';


按每个元素6个字节处理后的数组样式:

array(
    [0] => 'IT基地',
    [1] => '59zone',
    [2] => '.com交',
    [3] => '流平台',
)


具体实现代码如下:

//把字符串按照指定长度截取成数组
/*
 * String $str     需要拆分的字符串
 * String $l       指定每个数组元素中字符长度
 * return Array    分割之后的数组
*/
public function str_split_unicode($str, $l=0) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        $len2 = strlen($str);
        if($len==$len2){ //纯字母数字
            $l = $l * 1.75;
            for ($i = 0; $i < $len; $i += $l) {
                $ret[] = mb_substr($str, $i, $l, "UTF-8");
            }
            return $ret;
        }else{
            $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
            preg_match_all($pa, $str, $t_string);
            $matharr = "";
            foreach($t_string[0] as $k=>$s){
                $matharr[] = $s;
            }
            $i = $j = 0;
            $count = count($matharr);
            $str2 = '';
            $arrs = array();
            foreach($matharr as $k=>$v){
                $j++;
                $str2 .= $v;
                if(strlen($v)==mb_strlen($v)){ //字母或数字
                    $i = $i + 1;
                }else{    //中文
                    $i = $i + 2;
                }
                if($i>=$l || $j==$count){
                    $arrs[] = $str2;
                    $i = 0;
                    $str2 = '';
                }
            }
            return $arrs;
        }
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}


版权声明:本站所提供的文章、图片等内容均为用户发布或互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系我们客服人员删除。

274

精彩推荐

暂无评论

文明用语