PHP中一个好玩的性别判断扩展
今天我们来学习的一个扩展同时它也是非常小众的一个扩展,其实说白了,或许是根本没什么人用过得扩展。当然,我们也只是出于学习的目的来看看这个扩展到底是什么东西,有什么好玩的地方。
扩展说明
Gender 扩展从名称就可以看出,它是一个关于性别的扩展,这个扩展可以根据传递给它的用户姓名以及用户所在的地区国度来返回性别情况,是不是非常有意思。这个扩展直接在 PECL 网站进行下载安装即可,没有什么别的特殊的要求。
Gender 扩展是根据 Joerg Michael 这位大神所写得 gender.c 这个函数库来使用的,据说是包含 54 个国家地区的 40000 多个名字。具体的情况我们在下面的测试代码中好好看看它的效果。
根据姓名判断性别
在使用这个扩展的时候,我们要先准备一个函数,其实就是方便我们后面的测试操作的。
$gender = new Gender\Gender;
function showGender($name, $country)
{
global $gender;
$result = $gender->get($name, $country);
var_dump($result);
$data = $gender->country($country);
var_dump($data);
switch ($result) {
case Gender\Gender::IS_FEMALE:
printf("%s:女性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MOSTLY_FEMALE:
printf("%s:大部分情况下是女性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MALE:
printf("%s:男性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MOSTLY_MALE:
printf("%s:大部分情况下是男性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_UNISEX_NAME:
printf("%s:中性名称(不好确认性别) - \n", $name, $data['country']);
break;
case Gender\Gender::IS_A_COUPLE:
printf("%s:男女都适用 - %s\n", $name, $data['country']);
break;
case Gender\Gender::NAME_NOT_FOUND:
printf("%s:对应的国家字典中没有找到相关信息 - %s\n", $name, $data['country']);
break;
case Gender\Gender::ERROR_IN_NAME:
echo "给定的姓名信息错误\n";
break;
default:
echo "错误!\n";
break;
}
}
首先,实例化一个 Gender 对象,然后定义一个函数。在这个函数中,我们打印了 Gender 类中的 get() 方法所返回的信息,它返回的信息就是 $gender 对象根据指定参数所返回的性别判定值。然后我们通过下面的 switch 来判断返回的值是否与类中的常量所对应,这样就知道返回的结果是什么了。country() 方法获得的是指定国家地区的详细信息,我们在后面的测试代码中可以看到它们的输出。
showGender("William", Gender\Gender::USA);
// int(77)
// array(2) {
// ["country_short"]=>
// string(3) "USA"
// ["country"]=>
// string(6) "U.S.A."
// }
// William:男性 - U.S.A.
showGender("Ayumi Hamasaki", Gender\Gender::JAPAN);
// int(70)
// array(2) {
// ["country_short"]=>
// string(3) "JAP"
// ["country"]=>
// string(5) "Japan"
// }
// Ayumi Hamasaki:女性 - Japan
接下来就是简单地进行测试,先是测试一个英文的名字,并且指定国家地区为 USA ,也就是美国。可以看到 get() 返回的值是 77 ,对应的是 IS_MALE 的常量值,也就是这是一个男性的名称。country() 函数返回的内容是国家的全称与简写信息。在第二段测试中,我们给定的是一个日本女性的名字(滨崎步的英文名字),可以看到也正常返回了女性以及国家的相关信息。那么,这个扩展支持中文吗?
抱歉,它是不支持中文的,所以我们需要使用中文的拼音名称,而且对于指定国家地区为 CHINA 的话,使用拼音名称返回的都是中性的名称(不分男女都可以使用的名字)。
howGender("Gang Qiang", Gender\Gender::CHINA);
// int(63)
// array(2) {
// ["country_short"]=>
// string(3) "CHN"
// ["country"]=>
// string(5) "China"
// }
// Gang Qiang:中性名称(不好确认性别)
showGender("Anna Li", Gender\Gender::CHINA);
// int(70)
// array(2) {
// ["country_short"]=>
// string(3) "CHN"
// ["country"]=>
// string(5) "China"
// }
// Anna Li:女性 - China
额,貌似很坑啊,这东西对我们来说并没有什么实际的用处。由于这个扩展的资料非常少,面向中文的资料更是完全查不到,所以我也不知道它到底是不是根据拼音来确定中文名称的。完全的中文会直接返回 NAME_NOT_FOUND 信息。所以,大家图个乐就好啦!
总结
不得不说,如果没有刷文档还真不知道 PHP 中竟然还提供了这样的一个扩展库。其实有兴趣的同学完全可以尝试自己写一个能够判断中文名称的类似的扩展库出来,虽说在实际的业务开发中可能并不常用,但完全可以当做一个开源的练手机会提升一下自己的 C 语言技术。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/1.PHP中一个好玩的性别判断扩展.php
参考文档:
https://www.php.net/manual/zh/book.gender.php
关注公众号:【硬核项目经理】获取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料
知乎、公众号、抖音、头条搜索【硬核项目经理】
B站ID:482780532
PHP中一个好玩的性别判断扩展的更多相关文章
- PHP中非常好玩的Calendar扩展学习
为什么说这个 Calendar 扩展很好玩呢?因为你基本用不到它!这个扩展是一套关于日期历法的扩展,但是对于我们来说,它没有农历的相关操作,所以对于我们中国人来说这个扩展并没有什么实际的作用.不过这并 ...
- 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:
package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[ ...
- Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!
0.判断一个文本字符串中是否包含数字!/判断一个文本字符串是否是纯汉字! 公式=IF(LENB(A1)=2*LEN(A1),"都是汉字","含有非汉字字符") ...
- MYSQL中可以实现类似IF判断的方法
MYSQL中可以实现类似IF判断的方法 新建一张客户表,如下:sex:1-男,2-女,3-未知:level是客户的级别:1-超级VIP客户,2-VIP客户,3-普通客户 方式一:case函数:流程控制 ...
- Excel自动从身份证中提取生日、性别、年龄
现在学生的身份证号已经全部都是18位的新一代身份证了,里面的数字都是有规律的.前6位数字是户籍所在地的代码,7-14位就是出生日期.第17位“2”代表的是性别,偶数为女性,奇数为男性.我们要做的就是把 ...
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
C# PDF Page操作——设置页面切换按钮 概述 在以下示例中,将介绍在PDF文档页面设置页面切换按钮的方法.示例中将页面切换按钮的添加分为了两种情况,一种是设置按钮跳转到首页.下页.上页或者 ...
- SharePoint 2013中的默认爬网文件扩展名和分析文件类型
摘要:了解默认情况下 SharePoint 2013 爬网的文件扩展名及其解析的文件类型,可以借此了解搜索可以爬的文件和支持的功能. 如果“管理文件类型”页上的列表包含文件扩展名,爬网组件将仅爬网文件 ...
- Environment中针对的读写权限判断
Android应用开发中,常使用Environment类去获取外部存储目录,在访问外部存储之前一定要先判断外部存储是否已经是可使用(已挂载&可使用)状态,并且需要在AndroidManifes ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
随机推荐
- Nginx搭建与相关配置
目录 一.Nginx简介 1.1 概述 1.2 Nginx与Apache的差异 二.编译安装Nginx服务 2.1 将nginx软件包传到主机/opt目录下 2.2.安装依赖包 2.3.添加模块编译安 ...
- 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址
关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...
- uniapp scroll-view 组件横向滑动失效(ios问题出的最多)
注意事项(做好以下几点就很难出问题): 一.scroll-view组件必须有固定高度,不可出现高度坍塌或让高度消失等现象;(重中之重) 二.一般问题出的多的就是在nvue环境下去使用的scroll-v ...
- NOIP 模拟 $15\; \text{夜莺与玫瑰}$
题解 一道很妙的题,让求对于一个矩阵中,两点相连成线,有多少条直线,他们的交集是有限集. 转化一下题目,发现水平和竖直的只有 \(n+m\) 条,而左斜和右斜的条数是相同的,所以我们只需求出左或右中的 ...
- SpringSession(redis)
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- CSS中定位问题
通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式. position 属性值的含义: static 元素框正常生成.块级元素生成一个矩形框,作为文档流的一 ...
- JavaScript 特殊字符
代码输出\'单引号\"双引号\&和号\\反斜杠\n换行符\r回车符\t制表符\b退格符\f换页符
- Vulnhub靶机渗透 -- DC5
信息收集 通过nmap搜索到IP为:192.168.200.11 开启了80http.111RPC服务端口 先打开网页,然后进行目录爆破 contact.php 攻击 经搜索没有发现可以攻击wheel ...
- leetcode——217. 存在重复元素
leetcode--217. 存在重复元素 题目描述:给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false ...
- 安装redis 6.0.6
1.规划目录:下载目录.安装目录.redis数据目录mkdir -p /data/appmkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}mk ...