IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP将字符切割成每个拼音 -> 正文阅读

[PHP知识库]PHP将字符切割成每个拼音

假设我们有个字符串是拼音形式的,比如“woaini”,我们需要将他切割成每一个拼音的组合如“wo-ai-ni”。
方法如下:

    $str = 'woaini';
    $py = new py();
    $result = $py->analyze($str);
echo "<pre>";print_r($result);echo "<pre>";



class py
{
    private $pinyinRes = [];
    /**
     * 分析
     *
     * @param string $str
     * @return string
     * @throws Exception
     */
    public function analyze($str)
    {
            $this->pinyin($str);
            return $this->pinyinRes;
    }

    /**
     * @desc将字符串切割成各个拼音组成的集合(以‘_’分隔字符串)
     * @param $str 需要切割的字符串
     * @param array $group 全体拼音的分组集合
     * @param string $partStr 父级已经切割过的字符串
     * @return bool
     */
    public function pinyin($str,$group = [],$partStr=''){
        // 分组
        if (empty($group)) {
            $pinyinConfig = [
                'a','ai','an','ao','ba','bai','ban','bang','bao','bei','ben','beng','bi','bian','biao','bie','bin','bing','bo','bu','ca','cai','can','cang','cao','ce','cen','ceng','cha','chai','chan','chang','chao','che','chen','cheng','chi','chong','chou','chu','chua','chuai','chuan','chuang','chui','chun','chuo','ci','cong','cou','cu','cuan','cui','cun','cuo','da','dai','dan','dang','dao','de','dei','den','deng','di','dia','dian','diao','die','ding','diu','dong','dou','du','duan','dui','dun','duo','e','en','eng','er','fa','fan','fang','fei','fen','feng','fiao','fo','fou','fu','ga','gai','gan','gang','gao','ge','gei','gen','geng','gong','gou','gu','gua','guai','guan','guang','gui','gun','guo','ha','hai','han','hang','hao','he','hei','hen','heng','hong','hou','hu','hua','huai','huan','huang','hui','hun','huo','ji','jia','jian','jiang','jiao','jie','jin','jing','jiong','jiu','ju','juan','jue','ka','kai','kan','kang','kao','ke','ken','keng','kong','kou','ku','kua','kuai','kuan','kuang','kui','kun','kuo','la','lai','lan','lang','lao','le','lei','leng','li','lia','lian','liang','liao','lie','lin','ling','liu','lo','long','lou','lu','luan','lun','luo','lv','lve','ma','mai','man','mang','mao','me','mei','men','meng','mi','mian','miao','mie','min','ming','miu','mo','mou','mu','na','nai','nan','nang','nao','ne','nei','nen','neng','ni','nian','niang','niao','nie','nin','ning','niu','nong','nou','nu','nuan','nun','nuo','nv','nve','o','ou','pa','pai','pan','pang','pao','pei','pen','peng','pi','pian','piao','pie','pin','ping','po','pou','pu','qi','qia','qian','qiang','qiao','qie','qin','qing','qiong','qiu','qu','quan','que','qun','ran','rang','rao','re','ren','reng','ri','rong','rou','ru','rua','ruan','rui','run','ruo','sa','sai','san','sang','sao','se','sen','seng','sha','shai','shan','shang','shao','she','shei','shen','sheng','shi','shou','shu','shua','shuai','shuan','shuang','shui','shun','shuo','si','song','sou','su','suan','sui','sun','suo','ta','tai','tan','tang','tao','te','tei','teng','ti','tian','tiao','tie','ting','tong','tou','tu','tuan','tui','tun','tuo','wa','wai','wan','wang','wei','wen','weng','wo','wu','xi','xia','xian','xiang','xiao','xie','xin','xing','xiong','xiu','xu','xuan','xue','xun','ya','yan','yang','yao','ye','yi','yin','ying','yo','yong','you','yu','yuan','yue','yun','za','zai','zan','zang','zao','ze','zei','zen','zeng','zha','zhai','zhan','zhang','zhao','zhe','zhei','zhen','zheng','zhi','zhong','zhou','zhu','zhua','zhuai','zhuan','zhuang','zhui','zhun','zhuo','zi','zong','zou','zu','zuan','zui','zun','zuo'
            ];
            foreach ($pinyinConfig as $c) {
                $group[$c[0]][] = $c;
            }
        }
        // 首字不符
        if (!array_key_exists($str[0], $group)) {
            return false;
        }

        $length      = strlen($str);
        for ($i = 1; $i <=6; $i++){//拼音最多6个字符长度
            $start = 0;
            if(!empty($partStr)){
                $start = $this->getPartLen($partStr);
            }
            if($start+$i>$length){
                continue;
            }
            $part   = substr($str, $start, $i);

            $first       = $str[$start];
            $inGroup     = $group[$first];//所在分组
            $inGroupKey  = array_flip($inGroup);//该字母所在组别

            $subLen = 0;
            if (array_key_exists($part, $inGroupKey)) {
                $subLen = strlen($part);
            }
            if($subLen){
                if(!empty($partStr)){
                    $nowPartStr = $partStr.'_'.$part;
                }else{
                    $nowPartStr = $part;
                }
                $nowLen = $this->getPartLen($nowPartStr);
                if($nowLen<$length){
                    $this->pinyin($str, $group,$nowPartStr);
                }elseif($nowLen==$length){
                    $this->pinyinRes[] =$nowPartStr;
                }
            }
        }
    }

    /**
     * 获取已切割的字符串长度
     * @param $partStr
     * @return int
     */
    public function getPartLen($partStr){
        if(empty($partStr)) return 0;
        $partArr = explode('_',$partStr);
        $len = 0;
        foreach ($partArr as $str){
            $len += strlen($str);
        }
        return $len;
    }




}

打印结果
在这里插入图片描述
以 xianguang 测试,结果为(有两种可能):
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:23:01  更:2021-08-12 16:23:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 12:13:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码