2010-09-14 2 views
2

Как многие рекомендуют мне отделять имя и фамилию вместо «full_name» со всем, как я могу отделить их от каждой переменной, поэтому, если вы, например, введите в поле: «Dude Jackson «затем« Чувак »попадает в $ firstname и Jackson в $ lastname.PHP: Отделить одно поле в два

ответ

2

Предполагая, что первое имя всегда приходит первым и нет отчества:

list($firstname, $lastname) = explode(' ', $full_name); 

Это просто взрывает $full_name в массив, содержащий две строки, если они разделены только одним пробелом, и отображает их на первый и соответственно.

1

Вы можете сделать:

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

Это предполагает, что вы полное имя содержит имя и фамилию, разделенные одним пробелом.

РЕДАКТИРОВАТЬ:

В случае, если Lastname нет, вышеупомянутый способ дать предупреждение о undefined offset. Чтобы преодолеть это, вы можете использовать альтернативный метод:

if(preg_match('/^(\S*)\s*(\S*)$/',$full_name,$m)) { 
     $first_name = $m[1]; 
     $last_name = $m[2]; 
} 
+0

Если фамилия нет, вы можете по-прежнему список ($ first_name, $ last_name) делать = взорваться (' ' $ FULL_NAME.'); –

0
$full_name = "Dude Jackson"; 
$a = explode($full_name, " "); 
$firstname = $a[0]; 
$lastname = $a[1]; 
5

Это невозможно сделать с 100% точностью, поскольку первое/последнее имя содержит больше информации, чем одно «полное имя». (Полное имя может включать в себя средние имена, инициалы, заголовки и т. Д. Во многих разных заказах.)

Если вам просто нужно быстро исправить устаревшую базу данных, возможно, будет разорвано первое пространство.

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 ван дер Мерве ». Кроме того, вы можете вставлять чеки для $ full_name только как имя, без фамилии.

+1

Взрыв ($ full_name, "", 2) ;-) –

+0

вы просто попали в гвоздь на голове :) –

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 = " "; 
    }