2016-07-08 15 views
1

フルネームのフォームから渡された文字列があります。Laravel 5.2スプリット文字列名姓

私は、以下のものを使用して文字列を分割しました..私は姓と名を格納し、私のデータベース内:ユーザーが姓を入力しない場合

$name = explode(" ", $request->name); 
$lastname = array_pop($name); 
$firstname = implode(" ", $name); 

これは、しかし、素晴らしい作品フィールドに入力すると、lastnameが最初になるため上記は機能しません。

何か不足していますか?

+0

ユーザに 'first_name'と' last_name'を入力させ、それをそのまま保存します。 'full_name'を返すには、' $ first_name。 ""。$ last_name'を返します。連結は、ユーザーが正しい情報を提供しているか、名前にスペースが含まれていないと仮定した場合より優れた解決策です。 –

+0

@TimLewisと同意します。ただし、サインアッププロセスのような場合には、ユーザーが記入する必要があるフィールドの量を絶対最小値まで調理する必要があります。その場合、IMOはどの部分が名字であるかを「推測」するだけでOKですが、別々に保存しておき、必要に応じて後で別々に編集する機会をユーザーに与えます。 – Dencker

+0

@Denckerそれを簡単に保つという主題に関する公正点。ケースの90%のように、名前にはスペースはありませんが、それを仮定するのは大丈夫ですが、誰かのファーストネームが「何か」のようなものであることを認識して、メアリーアン "。 –

答えて

5

これは私が名前を分割するために使用してきたものです:

$splitName = explode(' ', $name, 2); // Restricts it to only 2 values, for names like Billy Bob Jones 

$first_name = $splitName[0]; 
$last_name = !empty($splitName[1]) ? $splitName[1] : ''; // If last name doesn't exist, make it empty 
0

私は通常、あなたが(代わりにarray_poparray_shiftを使用して)何をすべきかと非常に似ているこの、実行します。

$split = explode(" ", $request->name); 

$firstname = array_shift($split); 
$lastname = implode(" ", $split); 

を単一の名前、複数の名前、空の文字列の両方で動作します。条件なし。