如何获得姓氏第一个首字母

时间:2011-04-27 19:15:13

标签: php strip

  

可能重复:
  Regex - Return First and Last Name

嗨,

我有一个存储在一个字段中的用户的全名。我怎样才能获得完整的名字和姓氏。这就是我现在正在使用的:

 $first = substr($full_n, 0, strpos($full_n,' '));  

5 个答案:

答案 0 :(得分:5)

list ($first, $last) = explode(' ', $full_n, 2);
echo "$first {$last[0]}.";

与所有其他解决方案一样,也不会使用两个以上的名称。如果你想用它做更多的事情,你应该分开保存所有(名字,中间名,姓氏......),而不仅仅是显示。

更新

灵感来自Pekka(问题的评论;))

$names = explode(' ', $full_n);
$first = array_shift($names);
$last = array_pop($names);
echo "$first {$last[0]}.";

这适用于任意(> = 2)个名称,但只会显示第一个(完整)和最后一个(缩短)。像“施密特 - 穆勒”这样的东西看起来很好奇(“S。”)。

答案 1 :(得分:2)

嗯,你几乎那里......

如果保证您的用户将拥有两个名称(只是第一个和最后一个,两个都没有空格),那么您可以这样做:

$full_n = 'Demian Brecht';
$first = substr($full_n, 0, strpos($full_n,' ')+2);  
print_r($first);

但是,如果你正在处理> 2个名字,那么你将不得不重新考虑你的逻辑。

答案 2 :(得分:1)

$full_n = trim($full_n); // remove extra spaces

$first_name = substr($full_n, 0, strpos($full_n, ' '));
$last_initial = substr($full_n, strrchr($full_n, ' '), 1);

$result = trim($first_name . ' ' . $last_initial);

答案 3 :(得分:1)

我很难理解这个问题。如果你想要完整的名字和姓氏的第一个首字母。

$firstwithlastnameinitial = substr($full_n, 0, strpos($full_n, ' ')) . substr($full_n, strpos($full_n, ' ') + 1, 1);

OR

list ($fname, $lname) = explode(' ', $full_n, 2);
$lastwithfirstinitial = $fname . substr($lname, 0, 1);

如果您想要姓氏的第一个首字母的完整姓氏:

$lastwithfirstinitial = substr($full_n, strpos($full_n, ' ') + 1, strlen($full_n)) . substr($full_n, 0, 1);

这应该检索姓氏加上第一个姓名。或者更容易阅读的东西。

list ($fname, $lname) = explode(' ', $full_n, 2);
$lastwithfirstinitial = $lname . substr($fname, 0, 1);

答案 4 :(得分:1)

(不是答案但是太大而不能发表评论)

这个问题没有解决办法,你只需要决定用什么方式来破坏人们的名字。

答案中已经有几个不错的例子,但是在评论中Pekka的例子都会失败。像Hillary Rodham Clinton这样的某些名称通常是连字符Hillary Rodham-Clinton,并且不会出现问题。

更简单的常见示例(例如John von NeumannPhillip de la Cruz)仍会失败。