Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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_String_Trim - Fatal编程技术网

Php 缩短全名,使姓氏仅为第一个字母

Php 缩短全名,使姓氏仅为第一个字母,php,string,trim,Php,String,Trim,在阅读了一些已经提出的问题并查看了一些其他网站之后,我仍然没有进一步找到一种简单的方法来获取全名,比如说“Jake Whiteman”,并将其删减,以便在网页上显示为“Jake W”。显然,周围没有语音标记,因此没有任何混淆 有人知道怎么做吗?我敢肯定,这可能只是一个找到空白,然后删掉姓氏的问题,我似乎找不到一个方法来做到这一点 提前谢谢 假设它们的格式始终为“[Other Names]LastName”,因此最后一个单词始终是姓氏,您可以通过php函数explode()通过delimeter[

在阅读了一些已经提出的问题并查看了一些其他网站之后,我仍然没有进一步找到一种简单的方法来获取全名,比如说“Jake Whiteman”,并将其删减,以便在网页上显示为“Jake W”。显然,周围没有语音标记,因此没有任何混淆

有人知道怎么做吗?我敢肯定,这可能只是一个找到空白,然后删掉姓氏的问题,我似乎找不到一个方法来做到这一点


提前谢谢

假设它们的格式始终为“[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>