2

多くの人が、すべてを含む「full_name」の代わりに姓と名を区切ることをお勧めしますが、どのようにすればそれらを各変数に分けることができるので、たとえばフィールドに「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、2 つの文字列が 1 つのスペースだけで区切られている場合、単純に 2 つの文字列を含む配列に分解され、それぞれの名前と姓の変数にマップされます。

于 2010-09-14T11:44:35.313 に答える
1

できるよ:

list($first_name,$last_name) = explode(' ',$full_name);

これは、フル ネームに名前と姓が 1 つのスペースで区切られて含まれていることを前提としています。

編集:

姓が存在しない場合、上記のメソッドは の警告を出し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

私は 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

セパレータとしてスペースを使用して、値をその部分に分解する必要があります

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

于 2010-09-14T11:50:05.393 に答える
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 に答える
0
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$lastname = $a[1];
于 2010-09-14T11:45:45.930 に答える