嗨,
我有一个存储在一个字段中的用户的全名。我怎样才能获得完整的名字和姓氏。这就是我现在正在使用的:
$first = substr($full_n, 0, strpos($full_n,' '));
答案 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 Neumann
或Phillip de la Cruz
)仍会失败。