如何获得姓氏第一inital
嗨,
我存储在一个领域用户的全名。我怎样才能得到完整的名字和姓氏第一首。这就是我使用的是现在:
$first = substr($full_n, 0, strpos($full_n,' '));
(不是一个答案,但过大是注释)
有没有办法解决这个问题,你就只能用什么方式将你裂伤人民的名称来决定。
已经有好几个体面的例子,但是他们在Pekka的评论中都会失败。有些名字如Hillary Rodham Clinton
通常与Hillary Rodham-Clinton
连字,并且不会有问题。
更简单的常见示例如John von Neumann
或Phillip de la Cruz
仍然会失败。
嗯,你几乎有...
如果是保证你的用户将有名字(只是第一和最后,在任何无空格),那么你可能只是这样做:
$full_n = 'Demian Brecht';
$first = substr($full_n, 0, strpos($full_n,' ')+2);
print_r($first);
但是,如果你处理> 2名,那么你就必须重新考虑你的LO GIC。
$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);
我很难理解这个问题。如果你想要完整的名字和姓氏的第一个字母。
$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);
list ($first, $last) = explode(' ', $full_n, 2);
echo "$first {$last[0]}.";
不会超过两个名字工作太,像所有其他的解决方案。如果你想要做更多的事情,你应该分开保存所有的(姓,名,姓......),而不仅仅是显示。
更新:
启发BE佩卡(问题的意见;))
$names = explode(' ', $full_n);
$first = array_shift($names);
$last = array_pop($names);
echo "$first {$last[0]}.";
这适用于任意(> = 2)名称的数量,但将只显示第一个(完整)和最后(缩短)。 “Schmidt-Mueller”之类的东西看起来很好奇(“S.”)。
$ last_hyphened = explode(' - ',$ last); foreach($ last_hyphened as $ lnh){ $ last_initials + = substr($ lnh,1); } ....这将允许您使用'$ last_initials',无论连字符名称的数量多少{Schmidt-Mueeler,Rodham-Clinton} – DevlshOne 2012-03-28 19:19:42
需要更多信息。你打算如何处理Butros Butros Ghali? (最后2个字)'希拉里克林顿'? (最后2个字)'约翰菲茨杰拉德肯尼迪'(最后1个字)? '卡尔Theodor玛丽亚尼古拉斯约翰雅各布菲利普弗朗茨约瑟夫西尔维斯特Freiherr冯和祖Guttenberg'(最后2个字,这是一个真名!) – 2011-04-27 19:18:35
@佩卡没有想到这一点。谢谢。 – AAA 2011-04-27 19:25:39