zoukankan      html  css  js  c++  java
  • 【PHP】php分隔字符串为数组

    工作中会经常分隔字符串为数组,我们可以用php内置函数str_split(),可是有时候字符串中包含中文,切割后会乱码,比如

    print_r(str_split('dw氛围fesf',3));
    

     输出

    Array
    (
        [0] => php
        [1] =>  �
        [2] => ��
        [3] => ��
        [4] => ��
        [5] => ��
        [6] => �!!
        [7] => !
    )
    

    为了能处理多字节字符串
    下面函数可以实现
    function mbStringToArray($str) {
        if(empty($str)){
           return false;
        }
        $len = mb_strlen($str);
        $array = array();
        for($i = 0; $i<$len; $i++) {
            $array[] = mb_substr($str, $i, 1);
        }
        return $array;
    }
    /**
      * @param str $str    
      * @param int $length 截取长度
      * @param boole $byte 是否按字节分隔 false 按字符数分隔
      * @return array
    */
    function _str_split($str,$length,$byte=false){
        if(mb_strwidth($str) == 1 || empty($str)){
           return $str;
        }
        if($encoding = mb_detect_encoding($str, null, true) === false ){
           return str_split($str, $length);
        }
        $utf8_str = mb_convert_encoding($str, 'utf8', $encoding);
        if($byte){
            $line = '';
            $split_arr = [];
            foreach (preg_split('//u', $utf8_str,-1,PREG_SPLIT_NO_EMPTY ) as $char) {
                $width = mb_strwidth($line.$char,'utf8');
                if($width <= $length){
                    $line .= $char;
                    continue;
                }
                $split_arr[] = str_pad($line, $width);
                $line = $char;
            }
            return $split_arr;
        }else{
            $str_arr = mbStringToArray($str);
            if($str_arr){
                $chunk_index = 0;
                $k_index = 0;
                $line = '';
                $chunks = [];
                foreach ($str_arr as $key=>$val){
                    $line .= $val;
                    $chunks[$k_index] = $line;
                    if ($chunk_index++ == $length-1) {
                        $line = '';
                        $k_index++;
                        $chunk_index = 0;
                    }
                }
            }
            return $chunks;
        }
    
    }
    

     执行

    print_r(_str_split($str,3,false));
    

     输出

    Array
    (
        [0] => php
        [1] =>  开发
        [2] => 者中心
        [3] => !!!
    )
    
  • 相关阅读:
    typeof检测几种较为特殊的值与Boolean强制转换哪几种值为false Amy
    类型检测 Amy
    JS基本概念 Amy
    JS导入文件与CSS导入文件的不同 Amy
    JS运行环境 Amy
    主流浏览器及其渲染引擎 Amy
    JS引用类型 Amy
    同名函数的覆盖问题 Amy
    JS变量、作用域和内存问题 Amy
    HTTP协议学习(1)
  • 原文地址:https://www.cnblogs.com/songgj/p/8442946.html
Copyright © 2011-2022 走看看