我有一个数组,它包含全名。我知道如何显示基本上位于第一个索引中的姓氏。如何显示姓氏后面的其余值?
$fullname = array('fullname' => 'POTTER Harry James');
$res = implode("", $fullname);
$name = preg_split("/['s,]+/", $res);
$lname = $name[0];
我用名字做的事:
$fname = $name[1]. " ".$name[2];
它很好用,但有更干净的方法吗?我的意思是,如果用户有两个以上的名字怎么办?
谢谢。
我建议使用explode()
函数:
<?php
$fullname = array('fullname' => 'POTTER Harry James');
$parts = explode(' ', $fullname['fullname']);
var_dump($parts);
?>
显示:
array(3) {
[0]=>
string(6) "POTTER"
[1]=>
string(5) "Harry"
[2]=>
string(5) "James"
}
您可以根据需要使用$parts
的任何部分。
<?php
$a = array_shift($parts);
$b = implode(' ', $parts);
echo "{$b} ({$a})"; // Harry James (POTTER)
?>
UPDv1:
在您当前的代码中,您可能会做同样的事情:
<?php
$lname = array_shift($name);
$fname = implode(' ', $name);
?>
我认为应该先从数组中去掉最后一个名称,然后使用循环将剩余的名称连接为fistname。
$fullname = array('fullname' => 'POTTER Harry James');
$res = implode("", $fullname);
$name = preg_split("/['s,]+/", $res);
$lname = array_shift($name);
$fname = "";
foreach($name as $fnames)
$fname.= " ".$fnames;
$fullname = array('fullname' => 'POTTER Harry James');
$firstNames = strstr($fullname['fullname'], ' '); // $firstNames='Harry James'
这将在第一个空格字符之后获得字符串。
这是一项不可能完成的任务。如果任由用户自己使用,用户将把各种各样的东西放在一个字段中。
如果你想把用户的名字和姓氏分开,你应该分别询问他们,因为没有正则表达式可以确定正确的方式来分解他们的名字。
您可以进行
<?php
$fullname = array('fullname' => 'POTTER Harry James');
list($lname,$fname) = explode(" ", $fullname["fullname"],2);
echo $fname."<br>".$lname;
?>
如果名称包含两个或两个以上的单词,这将起作用。如果有两个以上的单词,则除第一个单词外的任何单词都将被视为名字,第一个单词将被视为由姓氏。