工作中会经常分隔字符串为数组,我们可以用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] => !!!
)

【php】php分隔字符串为数组的更多相关文章

  1. [Shell] 分隔字符串为数组

    #!/bin/bash tmp="test,girl,boy,love" OLD_IFS="$IFS" IFS="," arr=($a) I ...

  2. mysql下将分隔字符串转换为数组

    MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用. 现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗 ...

  3. SQL自定义函数split分隔字符串

    SQL自定义函数split分隔字符串 一.F_Split:分割字符串拆分为数据表 Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max ...

  4. shell入门笔记2:字符串、数组、echo与printf

    说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...

  5. (js) 字符串和数组的常用方法

    JS中字符串和数组的常用方法 JS中字符串和数组的常用方法 js中字符串常用方法 查找字符串 根据索引值查找字符串的值 根据字符值查找索引值 截取字符串的方法 字符串替换 字符串的遍历查找 字符串转化 ...

  6. javascript中字符串与数组互转的方法分享

    说明:1.join()方法:用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的.指定分隔符方法join("$");其中$可以是任意字符2.split()方法:用 ...

  7. 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

    split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 ...

  8. ios 字符串处理:截取字符串、匹配字符串、分隔字符串

    1.截取字符串 NSString*string =@"sdfsfsfsAdfsdf";string = [string substringToIndex:7];//截取掉下标7之后 ...

  9. C#分隔字符串时遭遇空值

    在C#中分隔字符串时,按特定字符进行分隔的时候可能会遇到空值,如何我现在传入的是Id的字符串,如:"1501,1502,1503,,1505",以逗号分隔,由于各种原因,导致传入的 ...

随机推荐

  1. 中国科学技术大学统一身份认证系统CAS

    CAS | Apereohttps://www.apereo.org/projects/cas 中国科学技术大学统一身份认证系统https://passport.ustc.edu.cn/login?s ...

  2. CentOS6.5配置 cron

    CentOS6.5配置 cron 任务 - mengjiaoduan的博客 - CSDN博客https://blog.csdn.net/mengjiaoduan/article/details/649 ...

  3. Azure系列2.1.15 —— SharedAccessBlobPolicy

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  4. Mybatis+Spring整合后Mapper测试类编写

    public class UserMapperTest { private ApplicationContext applicationContext; @Before public void ini ...

  5. 关于vagrant一个虚拟机搭建多个项目配置(总结)

    问题1:执行vagrant status命令,报错,没有找到命令,翻译:“vargrant bash命令没有找到.” 解答:因为在/home目录中,所有无法执行该命令,需要切换到外部进行执行 问题2: ...

  6. Vagrant系列(二)----Vagrant的配置文件Vagrantfile详解

    一.简介 在我们的工作目录下有一个Vagrantfile文件,里面包含有大量的配置信息,通过它可以定义虚拟机的各种配置,如网络.内存.主机名等,主要包括三个方面的配置,虚拟机的配置.SSH配置.Vag ...

  7. Jenkins系统上的时间不正确问题

    很简单,点击系统管理,选择执行脚本命令: 打开 [系统管理]->[脚本命令行]运行下面的命令 System.setProperty('org.apache.commons.jelly.tags. ...

  8. 将WCF寄宿在托管的Windows服务中

    在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...

  9. Java HashMap的put操作(Java1.8)

    https://www.cnblogs.com/JzedyBlogs/p/10208295.html 写得非常好: 这个是Java1.8 ------------------------------- ...

  10. SSH本地端口转发的理解

    ssh -L 3307:127.0.0.1:3306 user@ssh-server -N 其中127.0.0.1:3306是指 ssh-server要访问资源的ip和端口 而3307则是隧道的开口, ...