正如许多人建议我将名字和姓氏分开而不是“全名”与所有内容一样,我如何将它们分开到每个变量中,所以如果例如在字段中键入:“Dude Jackson”然后“Dude”进入 $firstname 和杰克逊的 $lastname。
问问题
1070 次
7 回答
5
不可能做到 100% 准确,因为名字/姓氏包含的信息比单个“全名”要多。(全名可以包括中间名、首字母、头衔等,以许多不同的顺序排列。)
如果您只需要对旧数据库进行快速修复,则可以按第一个空格进行拆分。
于 2010-09-14T11:50:29.913 回答
2
假设名字总是在第一位并且没有中间名:
list($firstname, $lastname) = explode(' ', $full_name);
如果它们仅由一个空格分隔,这将简单地$full_name
分解为一个包含两个字符串的数组,并将它们分别映射到名字和姓氏变量。
于 2010-09-14T11:44:35.313 回答
1
你可以做:
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];
}
于 2010-09-14T11:44:46.543 回答
0
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$lastname = $a[1];
于 2010-09-14T11:45:45.930 回答
0
您需要使用空格作为分隔符将值分解为各个部分
于 2010-09-14T11:50:05.393 回答
0
我不是 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);
这应该将名称的所有剩余部分保存在 $lastname 中,应该有助于“Roelof van der Merwe”之类的名称。您也可以只检查 $full_name 作为名字,而不是姓氏。
于 2010-09-14T12:04:59.023 回答
0
这是代码/解决方案
$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 = " ";
}
于 2010-09-14T12:19:21.497 回答