多くの人が、すべてを含む「full_name」の代わりに姓と名を区切ることをお勧めしますが、どのようにすればそれらを各変数に分けることができるので、たとえばフィールドに「Dude Jackson」と入力すると、「Dude」は $firstname に取得され、 $lastname のジャクソン。
7 に答える
名前/姓には単一の「フルネーム」よりも多くの情報が含まれているため、100% の精度で行うことは不可能です。(氏名には、ミドル ネーム、イニシャル、役職などをさまざまな順序で含めることができます。)
レガシー データベースの簡単な修正が必要な場合は、最初のスペースで分割しても問題ない場合があります。
ファースト ネームが常に最初に来て、ミドル ネームがないと仮定します。
list($firstname, $lastname) = explode(' ', $full_name);
これは$full_name
、2 つの文字列が 1 つのスペースだけで区切られている場合、単純に 2 つの文字列を含む配列に分解され、それぞれの名前と姓の変数にマップされます。
できるよ:
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];
}
私は 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 のチェックを姓なしで名のみとして投入することもできます。
セパレータとしてスペースを使用して、値をその部分に分解する必要があります
これはコード/ソリューションです
$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 = " ";
}
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$lastname = $a[1];