1

我有一个包含全名的数组。我知道如何显示基本上位于第一个索引中的姓氏。如何在姓氏之后显示其余值?

$fullname = array('fullname' => 'POTTER Harry James');
$res = implode("", $fullname);
$name = preg_split("/[\s,]+/", $res);
$lname = $name[0];

我以名字做了什么:

$fname = $name[1]. " ".$name[2];

它工作正常,但有没有更清洁的方法来做到这一点?我的意思是,如果用户有两个以上的名字怎么办?

谢谢。

4

5 回答 5

3

我建议使用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);
?>
于 2013-05-30T04:16:39.540 回答
2

我认为您应该先从数组中取出姓氏,然后使用循环将剩余的名称连接为 firstname。

$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;
于 2013-05-30T04:36:07.843 回答
1
$fullname = array('fullname' => 'POTTER Harry James');
$firstNames = strstr($fullname['fullname'], ' '); // $firstNames='Harry James'

这将获取第一个空格字符之后的字符串。

于 2013-05-30T04:29:10.097 回答
0

你可以做

<?php
$fullname = array('fullname' => 'POTTER Harry James');
list($lname,$fname) = explode(" ", $fullname["fullname"],2);
echo $fname."<br>".$lname;
?>

如果名称包含 2 个或更多单词,这将起作用。如果有超过 2 个单词,则除第一个单词之外的任何内容都将被视为名字,第一个单词将被视为姓氏。

于 2013-05-30T04:26:15.410 回答
0

这是一项不可能完成的任务。如果留给他们自己的设备,用户会将各种各样的东西放在一个字段中。

如果您关心区分用户的名字和姓氏,则应分别询问他们,因为没有正则表达式可以确定拆分其姓名的正确方法。

于 2013-05-30T04:26:19.340 回答