2012-07-13 88 views
4

在阅读了一些已经提出的问题并检查了其他几个网站之后,我仍然没有进一步寻找一种简单的方法来取得像“Jake Whiteman”这样的全名,并对其进行修剪,使其在网页上显示为“Jake W.”。显然没有语音标记,所以没有任何混淆。缩短全名,所以姓氏只是第一个字母

任何人有任何想法如何做到这一点?我相信它可能只是寻找空白区域然后修整姓氏的问题,我似乎无法找到一个办法。

在此先感谢!

回答

6
$names = explode(" ", $name); 
echo $names[0]." ".$names[1][0]; 
+1

使用数组语法 – 2012-07-13 02:55:36

+0

干杯干得漂亮!感激! – 2012-07-13 03:08:42

+0

也许无关紧要,但Shamus O'Callaghan呢? – Josh 2012-07-13 03:50:23

1
$name = "Jake Whiteman"; 
$names = explode(' ', $name); //$names[0] = "Jake", $names[1] = "Whiteman" 
echo $names[0]." ".substr($names[1], 0,1)."."; 
2

假设他们的格式总是“[其它名称]姓氏”,使得最后一个字总是最后的名字,你可以通过它的分隔符[空格]通过分成令牌PHP函数爆炸()(http://php.net/manual/en/function.explode.php)

// Given 
$name = "Jake Whiteman"; 

// Process 
// Tokenize, getting separate names 
$names = explode(' ', $name); 
// Pop last name into variable $last_name, keep remaining names in $names 
$last_name = array_pop($names); 
// Get last initial 
$last_initial = $last_name[0]; 

// Put first names back together 
$beginning = implode(' ', $names); 
$full_name = $beginning.' '.$last_initial.'.'; 

您可以在一个功能把所有在一起:

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.' 
+0

这比我的版本更强大。 – sean 2012-07-13 02:57:25

+1

关于字符串格式和数组长度,仍然有很多假设:)。健壮性只对需求有用。如果你可以假设一个更简单的解决方案,那就去做吧,无论如何它通常会有更好的表现。 – garromark 2012-07-13 02:59:42

+0

这是非常真实的。 – sean 2012-07-13 03:01:03

5

您可以使用此代码。这将适用于3个措辞的名字,假设第二个单词是中间名,只有最后一个名字会被截断。

<?php 

$name = "Jake Awesome Whiteman"; 
$separate = explode(" ", $name); 
$last = array_pop($separate); 

echo implode(' ', $separate)." ".$last[0]."."; 

?> 
1

当只有名字和用户输入多个名称,这将是有益的

<!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> 
相关问题