您的位置:首页 > 编程语言 > PHP开发

找出字符串中出现次数最多的字

2017-10-12 22:40 162 查看
关于找出一个包含中文和英文的字符串中出现次数最多的字,

自己在网上找了各种解决方法,最后总结出了以下4种方法:

我是用PHP实现的,代码直接复制即用。

$str="法律框架go啊放假了ajg昆仑剑法,发 eoi";

//方法一

$strlen=mb_strlen($str,"utf-8");//获取中文长度,空格也包括

$arr=array();

for($i=0;$i<$strlen;$i++){

   $arr[]= mb_substr($str,$i,1,"utf-8");

}

$newarr=array_count_values($arr);

//统计数组中所有值出现的次数,返回数组

//键名为原数组的键值,键值为出现次数

//rsort($newarr);按照键值大到小排序,键名变成数字0,1..

arsort($newarr);//按照键值大到小排序,键名保存不变

$chararr=array_keys($newarr,Max(array_values($newarr)));//取包含指定值的键名

//$chararr=array_keys($newarr,current($newarr));

//方法二

/*

mb_regex_encoding('UTF-8');

mb_internal_encoding("UTF-8"); 

 

function mb_str_split($str){

    global $arr;//注意这个地方

   $temp=mb_split("(?<!^)(?!$)",$str);

   $arr[]=$temp[0];

    if(mb_strlen($temp[1],"utf-8")>1){

        mb_str_split($temp[1]);

    }else{

        $arr[]=$temp[1];

    }

    return $arr;

}

mb_str_split($str);

$newarr=array_count_values($arr);

arsort($newarr);

var_dump($newarr);

*/

//方法三

//$arr=preg_split('//u', $str,null,PREG_SPLIT_NO_EMPTY );

//方法四

//$arr=preg_split('/(?<!^)(?!$)/u', $str,null,PREG_SPLIT_NO_EMPTY ); 

//$arr=preg_split('/(?<!^)(?!$)/u', $str ); 

//var_dump($arr);

//(?<!expr)和(?!expr)都是零宽断言,前者表示此位置之前不匹配expr,后者表示此位置之后不匹配expr。

//在正则中^和$单独用表示开头和末尾。

//也就是说(?<!^)表示此位置之前不匹配开头,(?!$)表示此位置之后不匹配末尾。
//所以这个split匹配到的部分,为每两个字的中间位置(但是没有匹配到任何实际的字符)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php