php根据传递指定字符串,返回utf-8模式下的拆分字符串(具体效果请体验)
2020年2月25日
没有评论
/*
传递指定字符串,返回utf-8模式下的拆分字符串(具体效果请体验)
$split_len根据几个字符来拆分
$lowerStr是否需要返回转小写的str
$returnStrLen是否需要返回拆分之后的每个字符长度(以utf-8计算)
*/
function myImplodeStr($str,$split_len=1,$lowerStr=true,$returnStrLen=true){
$str=str_replace(' ','',$str);
if(!$str){return array();}
$len=mb_strlen($str,'UTF-8');
if($len<=$split_len) {return array($str);}
else {
$returnArr=array();
/*方法1*/
for($i=0;$i<$len;$i++){
$s=mb_substr($str,$i,$len-$i,'UTF-8');
if($returnStrLen){$returnArr[]=array($lowerStr?strtolower($s):$s,mb_strlen($s,'UTF-8'));}
else {$returnArr[]=$lowerStr?strtolower($s):$s;}
}
/*方法2
如果返回数组不计算字符utf-8模式下的长度,在单次或多次执行函数的情况下,方法1比方法2效率要高
当超过1000次执行后,方法2效率高(方法1使用了mb_strlen($s,'UTF-8'))
preg_match_all('/.{'.$split_len.'}|[^\x00]{1,'.$split_len.'}$/us',$str,$arr);
$len=count($arr[0]);
for($i=0;$i<$len;$i++){
$tempStr='';
$s_len=0;
for($m=$i;$m<$len;$m++){
$tempStr.=$lowerStr?strtolower($arr[0][$m]):$arr[0][$m];
$s_len++;
}
if($returnStrLen){$returnArr[]=array($tempStr,$s_len);}
else {$returnArr[]=$tempStr;}
}
*/
return $returnArr;
}
}
echo '<pre>';
var_dump(myImplodeStr('湖北:联保联供 守好百姓"菜篮子"',1,true,false));
执行效果:
array(16) {
[0]=>
string(42) "湖北:联保联供守好百姓"菜篮子""
[1]=>
string(39) "北:联保联供守好百姓"菜篮子""
[2]=>
string(36) ":联保联供守好百姓"菜篮子""
[3]=>
string(35) "联保联供守好百姓"菜篮子""
[4]=>
string(32) "保联供守好百姓"菜篮子""
[5]=>
string(29) "联供守好百姓"菜篮子""
[6]=>
string(26) "供守好百姓"菜篮子""
[7]=>
string(23) "守好百姓"菜篮子""
[8]=>
string(20) "好百姓"菜篮子""
[9]=>
string(17) "百姓"菜篮子""
[10]=>
string(14) "姓"菜篮子""
[11]=>
string(11) ""菜篮子""
[12]=>
string(10) "菜篮子""
[13]=>
string(7) "篮子""
[14]=>
string(4) "子""
[15]=>
string(1) """
}
近期评论