之前有分享了用javascript在客户端进行姓名拆分的方法,后应项目需要,又用PHP实现了,贴出来 跟大家分享交流:

/**

* 拆分姓名(姓氏和名字)

* @param string $fullname 全名(如:百里屠苏)

* @return array 一维数组[0=>'姓氏',1=>'名称']

* @author: 爱是西瓜

* @return array

*/

function splitName($fullname){

$hyphenated = array(

'百里','北堂','北野','北宫','辟闾',

'淳于','成公','陈生','褚师','城池',

'端木','东方','东郭','东野','东门','第五','大狐','段干','段阳','第二','东宫',

'公孙','公冶','公羊','公良','公西','公孟','公伯','公析','公肩','公坚','公乘','公皙','公户','公广','公仪','公祖','公玉','公仲','公上','公门','公山','高堂','高阳','郭公','谷梁','毌将','毌丘','单于','叱干','叱利','车非',

'独孤','大野','独吉','达奚','东里',

'哥舒','贯丘',

'皇甫','黄龙','胡母','何阳','赫连','呼延','贺兰','贺若','黑齿','斛律','斛粟',

'夹谷','九方','即墨','吉胡',

'可频',

'梁丘','闾丘','洛阳','陵尹','冷富','龙丘','令狐',

'慕容','万俟','抹捻',

'纳兰','南荣',

'南宫','南郭','女娲','南伯','南容','南门','南野',

'欧阳','欧侯',

'濮阳','普周','仆固','仆散','蒲察',

'青阳','漆雕','亓官','渠丘','屈突','屈卢','钳耳',

'壤驷','汝嫣',

'上官','少室','少叔','司徒','司马','司空','司寇','士孙','申屠','申徒','申鲜','申叔','夙沙','叔先','叔仲','叔孙','侍其','是云','索卢','厍狄',

'澹台','太史','太叔','太公','屠岸','唐古','拓跋','同蹄','秃发',

'闻人','巫马','微生','王孙','无庸','完颜',

'夏侯','西门','信平','鲜于','轩辕','相里','新垣','徐离姓',

'羊舌','羊角','延陵','於陵','伊祁','吾丘','乐正','宇文','尉迟','耶律',

'诸葛','颛孙','仲孙','仲长','钟离','宗政','主父','中叔','左人','左丘','宰父','长儿','仉督','长孙','子车','子书','子桑'

);

$vLength = mb_strlen($fullname, 'utf-8');

$lastname = '';

$firstname = '';//前为姓,后为名

if($vLength > 2){

$preTwoWords = mb_substr($fullname, 0, 2, 'utf-8');//取命名的前两个字,看是否在复姓库中

if(in_array($preTwoWords, $hyphenated)){

$lastname = $preTwoWords;

$firstname = mb_substr($fullname, 2, 10, 'utf-8');

}else{

$lastname = mb_substr($fullname, 0, 1, 'utf-8');

$firstname = mb_substr($fullname, 1, 10, 'utf-8');

}

}else if($vLength == 2){//全名只有两个字时,以前一个为姓,后一下为名

$lastname = mb_substr($fullname ,0, 1, 'utf-8');

$firstname = mb_substr($fullname, 1, 10, 'utf-8');

}else{

$lastname = $fullname;

}

return array($lastname, $firstname);

}

//输出调试

var_dump(splitName('李强'));

var_dump(splitName('百里屠苏'));

var_dump(splitName('完颜洪烈'));

注:字典数组数据来源于百度百科,只收录了有“根源”的复姓,少数名族英译的没有收录,双姓(父亲与母亲的姓组合新的姓)没有收录,来源不明确的姓也没收录。

拆分原理懂PHP应该都能理解,如果遇到了特殊的姓要处理加入字典即可。

提取文章中的人名php,php中实现将姓名拆分为姓氏和名字相关推荐

  1. MySQL数据库中,字符串拆分(如将英文姓名拆分为姓氏和名字两个字段)

    文章目录 前言 处理办法 前言 在开发工作中,遇到这样一个问题,之前客户将用户英文姓名存储在一个字段中如:Bin ZHOU 或 Bruce THOMEAS 这种形式.后期客户又想将将姓氏和名字分开存, ...

  2. python 如何识别字符串中的人名 ,如何识别一串拼音字符串以及韵母的提取 (一些方法整理)

    一.识别字符串中的人名或特定名词 笔者所用的是百度智能云提供的词法分析接口,它可以对字符串分词,并且能够识别句子中的人名,地名,等等.好,接下来教你们如何使用这个接口. 官网:https://clou ...

  3. 01. 利用正则表达式提取文章中的所有英文单词

    利用正则表达式提取文章中的所有英文单词 1.先创建一个Pattern对象, 模式对象,可以理解成一个正则表达式对象 Pattern pattern = Pattern.compile("[a ...

  4. getdata提取曲线数据_Origin如何从图表中获取数据

    点击上方"蓝字",一起愉快的玩耍吧!Origin如何从图表中获取数据01图片分析软件安装 一.GetData Graph Digitizer安装 使用范围: 1.需要引用别人文章中 ...

  5. 机器学习中,从一张图片中提取出感兴趣的区域(以交通标志为例)

    在进行机器学习中,不管是用Haar特征,或者是Hog特征,最后进行的不论是adaboost分类,还是svm分类,都只能是检测出待检测的正样本相近的图片. 比如,为了提高准确性,我们在进行正样本的训练时 ...

  6. 人名翻译_考研英语翻译:句子中出现人名怎么办?

    之前有同学问:金融考研英语翻译里出现人名需要翻吗?是的,需要.今天金程考研小编就来讲讲考研英语真题中的人名该如何翻译. 01 "约定俗成"的人名翻译 如果是名人,中文翻译的名字通行 ...

  7. 分析一个文本(英文文章)(300k—500k)中的词出现的频率,并且把频率最高的10个词打印出来。...

    最近老师出一个题目:分析一个文本(英文文章)(300k-500k)中的词出现的频率,并且把频率最高的10个词打印出来. 要分析每个词的频率,肯定要先把每个单词读出来并存储起来,用数据库存肯定是没那个必 ...

  8. Word处理控件Aspose.Words功能演示:从 Java 中的 Word 文档中提取图像

    图像通常用于表示 Word 文档中的重要信息.在文本旁边包含图像使内容更具吸引力.在某些情况下,您可能需要以编程方式提取嵌入在 Word 文档中的图像.为此,本文介绍了如何使用 Java 从 Word ...

  9. 这篇文章记录平时学习、项目中遇到的问题(未解决的居多)

    前言 这篇文章记录平时学习.项目中遇到的问题(未解决的居多) 快速排序的等号 维基百科的快排如下: while (left < right) {while (arr[left] < mid ...

最新文章

  1. vue如何配置服务器端跨域_客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解...
  2. 你最讨厌的同事来自哪家公司?这家公司被上千个程序员怒怼!
  3. GTX1080 安装 cuda 8.0 + cuDNN5.1
  4. petshop消息处理之理解
  5. 拉力赛 (Standard IO)
  6. flutter dart Md5加密
  7. win7网络的计算机名称,Win7指定的网络名不再可用快速解决教程
  8. 面对对象课程设计报告java,面向对象编程 JAVA编程综合实验报告.doc
  9. 蛇形数组打印(两种形式)
  10. java web 集成dom4j_[JavaWeb基础] 031.dom4j写入xml的方法
  11. Castle Team宣布Castle将与ASP.NET MVC整合
  12. CSS 布局 - 水平 amp;amp; 垂直对齐,全面的水平垂直居中方案
  13. mycelipse中关于编码的配置
  14. 今天下午又是在教室里坐了一个下午,头有点晕
  15. lnmp 一键安装后 MySQL密码
  16. 关于光纤宽带技术,看这一篇就够啦!
  17. vi命令下编辑文件时,按insert键文件底部不出现“INSERT”问题
  18. 方差、标准差、均方误差和均方根误差
  19. 【HDOJ】4210 Su-domino-ku
  20. 爆炸的符卡洋洋洒洒(01背包变形)

热门文章

  1. 【BZOJ3811】玛里苟斯(线性基)
  2. C#使用随机数模拟器来模拟世界杯排名(一)
  3. node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  4. 内核编译出错 [arch/arm/boot/compressed/piggy.lzo] Error 1
  5. 正面硬刚Beats!这款耳机从美国红回中国,细腻音质千元内无敌手!
  6. 手机淘宝宝贝详情页《问大家》数据爬虫手把手实战,包含动态参数如何生成...
  7. 哈工大+讯飞推出:高效预训练模型压缩方案GRAIN
  8. comsol仿真-关于肌肤效应
  9. BUUCTF WEB [BSidesCF 2020]Had a bad day
  10. iOS --- OpenGLES之图片纹理