129) { // 非 a-z 字母 $resultList[] = $pinyin[0]; } else { $resultList[] = substr($pinyin[0], 0, 1); } } $result = implode($separator, $resultList); return $result; } /** * @desc 将字符串中汉字转换为首字母拼音数组(支持所有多音字组合),自定义转换连接符,默认为'' * @param string $string * @param string $separator * @return array **/ public static function convertInitalPinyinList($string, $separator = '') { $result = array(); if (empty($string)) { return $result; } $stringList = self::splitString($string); $pinyinList = self::changePinyinList($stringList); // 弹出二维数组第一个元素作为起始数组。循环读取剩余数组元素。交叉笛卡儿积拼接生成所有多音字情况一维数组。 // 将所有可能结果赋值给起始数组,进入下一轮循环。至循环结束。 $prevPinyin = array_shift($pinyinList); // 处理起始数组,只有一个汉字和汉字开头的情况 foreach ($prevPinyin as $key => $strPrevPinyin) { if (ord($strPinyin) > 129) { // 非 a-z 字母 $prevPinyin[$key] = $strPrevPinyin; } else { $prevPinyin[$key] = substr($strPrevPinyin, 0, 1); } } foreach ($pinyinList as $pinyin) { $tmpPinyinList = array(); foreach ($prevPinyin as $strPrevPinyin) { foreach ($pinyin as $strPinyin) { if (ord($strPinyin) > 129) { // 非 a-z 字母 $tmpPinyinList[] = $strPrevPinyin . $separator . $strPinyin; } else { $tmpPinyinList[] = $strPrevPinyin . $separator . substr($strPinyin, 0, 1); } } } $prevPinyin = $tmpPinyinList; } $result = array_unique($prevPinyin); return $result; } /** * @desc 将字符串中汉字转换为完整拼音数组、首字母拼音数组(支持所有多音字组合),自定义转换连接符,默认为'' * @param string $string * @param string $separator * @return array **/ public static function convertAllPinyinList($string, $separator = '') { $result['full'] = self::convertPinyinList($string, $separator); $result['inital'] = self::convertInitalPinyinList($string, $separator); return $result; } }