PHP: Разделите одно поле на два


Поскольку многие рекомендуют мне разделять имя и фамилию вместо "полное имя" со всем, как я могу разделить их для каждой переменной, поэтому, если для вас, например, введите в поле: "Чувак Джексон", то "Чувак" получает $имя и Джексон в $фамилия.

Author: jjclarkson, 2010-09-14

7 answers

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

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

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

 2
Author: BoltClock, 2010-09-14 11:44:35

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

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

 5
Author: geon, 2010-09-14 12:03:34

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

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];
}
 1
Author: codaddict, 2010-09-14 11:51:49
$full_name = "Dude Jackson";
$a = explode($full_name, " ");
$firstname = $a[0];
$lastname = $a[1];
 0
Author: Martin Hennings, 2010-09-14 11:45:45

Вам нужно будет разделить значение на части, используя пробел в качестве разделителя

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

 0
Author: Drewdin, 2010-09-14 11:50:05

Я не программист 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);

Это должно сохранить всю оставшуюся часть имени в $фамилия, должно быть полезно для таких имен, как "Рулоф ван дер Мерве". Также вы можете вводить чеки на $full_name только в качестве имени, без фамилии.

 0
Author: Ashish Patil, 2010-09-14 12:04:59

Это код/решение

    $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  = " ";
    }
 0
Author: aWebDeveloper, 2010-09-14 12:28:12