Php 缩短全名,使姓氏仅为第一个字母
在阅读了一些已经提出的问题并查看了一些其他网站之后,我仍然没有进一步找到一种简单的方法来获取全名,比如说“Jake Whiteman”,并将其删减,以便在网页上显示为“Jake W”。显然,周围没有语音标记,因此没有任何混淆 有人知道怎么做吗?我敢肯定,这可能只是一个找到空白,然后删掉姓氏的问题,我似乎找不到一个方法来做到这一点Php 缩短全名,使姓氏仅为第一个字母,php,string,trim,Php,String,Trim,在阅读了一些已经提出的问题并查看了一些其他网站之后,我仍然没有进一步找到一种简单的方法来获取全名,比如说“Jake Whiteman”,并将其删减,以便在网页上显示为“Jake W”。显然,周围没有语音标记,因此没有任何混淆 有人知道怎么做吗?我敢肯定,这可能只是一个找到空白,然后删掉姓氏的问题,我似乎找不到一个方法来做到这一点 提前谢谢 假设它们的格式始终为“[Other Names]LastName”,因此最后一个单词始终是姓氏,您可以通过php函数explode()通过delimeter[
提前谢谢 假设它们的格式始终为“[Other Names]LastName”,因此最后一个单词始终是姓氏,您可以通过php函数explode()通过delimeter[space]将其拆分为标记(http://php.net/manual/en/function.explode.php)
$names = explode( " ", $name );
echo $names[0]." ".$names[1][0];
您可以将所有这些放在一个函数中:
function nameWithLastInitial($name) {
$names = explode(' ', $name);
$last_name = array_pop($names);
$last_initial = $last_name[0];
return implode(' ', $names).' '.$last_initial.'.';
}
$name = "Jake Whiteman";
echo nameWithLastInitial($name); // Should print 'Jake W.'
您可以使用此代码。这将适用于3个单词的名称,其中假设第二个单词是中间名,只有姓氏将被截断
<?php
$name = "Jake Awesome Whiteman";
$separate = explode(" ", $name);
$last = array_pop($separate);
echo implode(' ', $separate)." ".$last[0].".";
?>
当只有名字和用户名输入多个名称时,这将非常有用
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$userName = "Jakeds hfg gsd";
if(preg_match('/\s/',$userName)) {
$separate = explode(" ", $userName);
$last = array_pop($separate);
$first = mb_strimwidth($separate[0], 0 , 15);
echo $first." ".$last[0].".";
} else {
$first = mb_strimwidth($userName, 0 , 15);
echo $first;
}
//echo $first." ".$last[0].".";
?>
</body>
</html>
这比我的版本更健壮。仍然对字符串格式和数组长度做了很多假设:)。健壮性只在需要时才有用。如果你能假设一个更简单的解决方案,那就去做吧,反正它通常会有更好的性能。可能不相关,但沙默斯·奥卡拉汉呢?这仍然有效,虽然看起来很尴尬,但在我看来,这更像是一个边缘案例,取决于OP是否需要检查。@Josh Irish-huh?:D.另见
<?php
$name = "Jake Awesome Whiteman";
$separate = explode(" ", $name);
$last = array_pop($separate);
echo implode(' ', $separate)." ".$last[0].".";
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$userName = "Jakeds hfg gsd";
if(preg_match('/\s/',$userName)) {
$separate = explode(" ", $userName);
$last = array_pop($separate);
$first = mb_strimwidth($separate[0], 0 , 15);
echo $first." ".$last[0].".";
} else {
$first = mb_strimwidth($userName, 0 , 15);
echo $first;
}
//echo $first." ".$last[0].".";
?>
</body>
</html>