Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中只获取名字和姓氏的第一个字母_Php_Arrays_String_Character - Fatal编程技术网

在php中只获取名字和姓氏的第一个字母

在php中只获取名字和姓氏的第一个字母,php,arrays,string,character,Php,Arrays,String,Character,我希望仅使用用户名的第一个字母和姓氏的第一个字母来显示用户的首字母。(测试用户=TU) 即使用户输入前缀或中间名,如何实现此结果?(Test Middlename User=TU先生) 这是我到目前为止的代码(但将根据用户输入显示2个以上的字母): 您可以使用和来实现这一点 reset()将数组的内部指针倒带到第一个元素,并返回第一个数组元素的值 end()将数组的内部指针前进到最后一个元素,并返回其值 有太多的变体,但这应该捕获字符串中的名字和姓氏,该字符串可能有前缀或后缀,也可能没有前缀或后

我希望仅使用用户名的第一个字母和姓氏的第一个字母来显示用户的首字母。(测试用户=TU)


即使用户输入前缀或中间名,如何实现此结果?(Test Middlename User=TU先生)

这是我到目前为止的代码(但将根据用户输入显示2个以上的字母):

您可以使用和来实现这一点

reset()将数组的内部指针倒带到第一个元素,并返回第一个数组元素的值

end()将数组的内部指针前进到最后一个元素,并返回其值


有太多的变体,但这应该捕获字符串中的名字和姓氏,该字符串可能有前缀或后缀,也可能没有前缀或后缀以句点结尾:

public function initials() {
    preg_match('/(?:\w+\. )?(\w+).*?(\w+)(?: \w+\.)?$/', $this->name, $result);
    return strtoupper($result[1][0].$result[2][0]);
}
$result[1]
$result[2]
是第一个和最后一个捕获组,每个捕获组的
[0]
索引是字符串的第一个字符

这做得很好,但是带有空格的名称只返回第二部分,例如
De Jesus
只返回
Jesus
。您可以为姓氏添加已知的修饰语,如
de,von,van
等,但祝您好运,特别是因为它变得更长
van de,van der,van den

为了扩展非英语前缀和后缀,您可能需要对它们进行定义并去掉它们,因为有些前缀和后缀可能不会以句点结束

$delete = ['array', 'of prefixes', 'and suffixes'];
$name = str_replace($delete, '', $this->name);

//or just beginning ^ and end $
$prefix = ['array', 'of prefixes'];
$suffix = ['array', 'of suffixes'];
$name = preg_replace("/^$prefix|$suffix$/", '', $this->name);

据我所知,如果用户输入“Mr.Test Middlename user”,这将返回“MU”,这不是我想要的结果。也许我需要添加一些代码来自动删除前缀?@JakeScervino那么您预期的结果是什么?“即使用户输入前缀或中间名,我如何实现此结果?(Test Middlename user=TU先生)。“@JakeScervino好的!!我的错。更新了答案。现在检查它是否有效。我还会添加
strtoupper
如何知道名称是否有前缀?如果有前缀,我需要添加一些代码以自动删除前缀。也许我可以创建一个包含所有可能前缀的数组,然后从用户名字符串中删除它们(如果它包含前缀的话)?是的,但是你需要做很多假设,关于
Kiefer-William-Frederick-Dempsey-George-Rufus-Sutherland
Mrs.Carolina-Maria de-Jesus
?@AbraCadaver是的,我知道不可能预测每个用户将输入什么作为他们的名字,但我同意将“Kiefer William Frederick Dempsey George Rufus Sutherland”转换为“KS”。我也同意把“鲍勃·萨瑟兰”改成“BS”。LOL超出了问题的范围,但请尝试使用动词作为方法名称,例如
getIntials
。。。
public function initials() {
    preg_match('/(?:\w+\. )?(\w+).*?(\w+)(?: \w+\.)?$/', $this->name, $result);
    return strtoupper($result[1][0].$result[2][0]);
}
$delete = ['array', 'of prefixes', 'and suffixes'];
$name = str_replace($delete, '', $this->name);

//or just beginning ^ and end $
$prefix = ['array', 'of prefixes'];
$suffix = ['array', 'of suffixes'];
$name = preg_replace("/^$prefix|$suffix$/", '', $this->name);