存档

文章标签 ‘拆词’

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) """
}
分类: php学习 标签: ,
css.php