在Fastadmin中实现获取名称首字母
目录
安装依赖包
命令如下:
bash
composer require overtrue/pinyin
安装完成

添加公共函数
在框架common.php文件中添加获取首字母公共函数,
这样可以在项目的需要的地方调用。代码如下:
php
/**
* 根据输入名称(中文/字母)获取首字母,无法识别返回#
* @param string $name 输入名称(支持中文、字母、混合字符)
* @return string 首字母(大写)或#
*/
function getFirstLetter(string $name): string
{
// 初始化拼音转换实例
$pinyin = new Overtrue\Pinyin\Pinyin();
// 过滤非中文、非字母的字符(保留中文和字母)
// 匹配规则:[\x{4e00}-\x{9fa5}] = 中文,[a-zA-Z] = 字母,u修饰符支持中文匹配
$cleanName = preg_replace('/[^\x{4e00}-\x{9fa5}a-zA-Z]/u', '', $name);
// 过滤后为空,直接返回#
if (empty($cleanName)) {
return '#';
}
// 优先提取字母首字母
preg_match('/[a-zA-Z]/', $cleanName, $letterMatches);
if (!empty($letterMatches)) {
// 提取第一个字母并转为大写
return strtoupper($letterMatches[0]);
}
// 无字母,处理中文转首字母逻辑
try {
// 转换为中文拼音首字母数组
$firstLetters = $pinyin->abbr($cleanName);
$firstLetter = !empty($firstLetters) ? strtoupper($firstLetters[0]) : '#';
// 校验是否为有效字母,无效则返回#
return preg_match('/^[A-Z]$/', $firstLetter) ? $firstLetter : '#';
} catch (\Exception $e) {
// 转换异常返回#
return '#';
}
}
测试
php
var_dump(getFirstLetter("张三")); // 输出 string(1) "Z"
var_dump(getFirstLetter("李四123")); // 输出 string(1) "L"
var_dump(getFirstLetter("abc测试")); // 输出 string(1) "A"(优先字母)
var_dump(getFirstLetter("123456")); // 输出 string(1) "#"
var_dump(getFirstLetter("")); // 输出 string(1) "#"
var_dump(getFirstLetter("😀h哈哈")); // 输出 string(1) "H"(优先字母)
总结
使用composer安装的依赖库,实现项目的一个小功能,简单记录一下