2

正如许多人建议我将名字和姓氏分开而不是“全名”与所有内容一样,我如何将它们分开到每个变量中,所以如果例如在字段中键入:“Dude Jackson”然后“Dude”进入 $firstname 和杰克逊的 $lastname。

4

7 回答 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

您需要使用空格作为分隔符将值分解为各个部分

http://php.net/manual/en/function.explode.php

于 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 回答