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] => !!!
    )
    
  • 相关阅读:
    R语言学习笔记:向量化
    R语言笔记:快速入门
    再分析 返回值加引用&,const
    matlab 怎么保存plot的图 到指定文件夹
    不要在头文件中使用 using namespace std;
    散列表 (Hash table,也叫哈希表)
    重载操作符 operator overloading 学习笔记
    转 XMLHttpRequest().readyState的五种状态详解
    值得回味的基础知识理解加深
    完美解决fixed 水平居中问题
  • 原文地址:https://www.cnblogs.com/songgj/p/8442946.html
Copyright © 2011-2022 走看看