【发布时间】:2010-09-14 11:42:37
【问题描述】:
正如许多人建议我将名字和姓氏分开而不是“全名”与所有内容一样,我如何将它们分开到每个变量中,所以如果您在字段中输入示例:“Dude Jackson”然后“Dude”进入$firstname 和 Jackson 在 $lastname 中。
【问题讨论】:
正如许多人建议我将名字和姓氏分开而不是“全名”与所有内容一样,我如何将它们分开到每个变量中,所以如果您在字段中输入示例:“Dude Jackson”然后“Dude”进入$firstname 和 Jackson 在 $lastname 中。
【问题讨论】:
不可能做到 100% 准确,因为名字/姓氏比单个“全名”包含更多信息。 (全名可以包括中间名、首字母、头衔等,以许多不同的顺序排列。)
如果您只需要对旧数据库进行快速修复,则可以按第一个空格进行拆分。
【讨论】:
假设名字总是在前并且没有中间名:
list($firstname, $lastname) = explode(' ', $full_name);
这只是将$full_name 分解为一个包含两个字符串(如果它们仅由一个空格分隔)的数组,并将它们分别映射到名字和姓氏变量。
【讨论】:
你可以这样做:
list($first_name,$last_name) = explode(' ',$full_name);
这假设您的全名包含由单个空格分隔的名字和姓氏。
编辑:
如果姓氏不存在,上述方法会给出undefined offset 的警告。为了克服这个问题,您可以使用以下替代方法:
if(preg_match('/^(\S*)\s*(\S*)$/',$full_name,$m)) {
$first_name = $m[1];
$last_name = $m[2];
}
【讨论】:
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$lastname = $a[1];
【讨论】:
您需要使用空格作为分隔符将值分解为各个部分
【讨论】:
我不是 PHP 程序员,但为了快速修复,不丢失数据,
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$count = 1;
$lastname = "";
do {
$lastname .= $a[$count]." ";
$count++;
} while($count<count($a));
$lastname = trim($lastname);
这应该将 name 的所有剩余部分保存在 $lastname 中,应该对“Roelof van der Merwe”之类的名称有所帮助。您也可以检查 $full_name 仅作为名字,没有姓氏。
【讨论】:
这是代码/解决方案
$full_name = "Dude Jackson";
$a = explode($full_name, " ",1);
if(count($a) == 2)
{
$firstname = $a[0];
$lastname = $a[1];
}
if(count($a) < 2)
{
$firstname = $full_name;
$lastname = " ";
}
【讨论】: