Saltar al contenido

Dividir texto string en $primer y $apellido en php

Estate atento porque en esta reseña vas a hallar la solución que buscas.

Solución:

La forma más sencilla es, mediante el uso de explotar:

$parts = explode(" ", $name);

Después de tener las partes, haga estallar la última como $lastname:

$lastname = array_pop($parts);

Finalmente, haga implosionar el resto del array como tu $firstname:

$firstname = implode(" ", $parts);

ejemplo:

$name = "aaa bbb ccc ddd";

$parts = explode(" ", $name);
if(count($parts) > 1) 
    $lastname = array_pop($parts);
    $firstname = implode(" ", $parts);

else

    $firstname = $name;
    $lastname = " ";


echo "Lastname: $lastnamen";
echo "Firstname: $firstnamen";

Podría resultar:

tomatech:~ ariefbayu$ php ~/Documents/temp/test.php 
Lastname: ddd
Firstname: aaa bbb ccc

Me gusta la respuesta de cballou porque hay un esfuerzo por verificar si solo hay un nombre. Pensé en agregar mis funciones para cualquier otra persona que venga a buscar.

Función simple, usando Regex (palabra char y guiones)

  • Supone que el apellido será una sola palabra.
  • No hace ninguna suposición sobre los segundos nombres, que todo simplemente se agrupa en el primer nombre.
  • Sin embargo, podría usarlo nuevamente, en el resultado del “primer nombre” para obtener el primero y el medio.

Aquí está el código:

// uses regex that accepts any word character or hyphen in last name
function split_name($name) 
    $name = trim($name);
    $last_name = (strpos($name, ' ') === false) ? '' : preg_replace('#.*s([w-]*)$#', '$1', $name);
    $first_name = trim( preg_replace('#'.preg_quote($last_name,'#').'#', '', $name ) );
    return array($first_name, $last_name);

Ej. 1: split_name('Angeler') salidas:

array(
    0 => 'Angeler',
    1 => ''
);

Ej. 2: split_name('Angeler Mcgee') salidas:

array(
    0 => 'Angeler',
    1 => 'Mcgee'
);

Ej. 3: split_name('Angeler Sherlee Mcgee') salidas:

array(
    0 => 'Angeler Sherlee',
    1 => 'Mcgee'
);

Para dividir el primer y segundo nombre,

Ej. 4: split_name('Angeler Sherlee') salidas:

array(
    0 => 'Angeler',
    1 => 'Sherlee'
);

Otra función: también detecta segundos nombres

Más tarde decidí que sería bueno tener el segundo nombre resuelto automáticamente, si corresponde, así que escribí esta función.

function split_name($name) 
    $parts = array();

    while ( strlen( trim($name)) > 0 ) 
        $name = trim($name);
        $string = preg_replace('#.*s([w-]*)$#', '$1', $name);
        $parts[] = $string;
        $name = trim( preg_replace('#'.preg_quote($string,'#').'#', '', $name ) );
    

    if (empty($parts)) 
        return false;
    

    $parts = array_reverse($parts);
    $name = array();
    $name['first_name'] = $parts[0];
    $name['middle_name'] = (isset($parts[2])) ? $parts[1] : '';
    $name['last_name'] = (isset($parts[2])) ? $parts[2] : ( isset($parts[1]) ? $parts[1] : '');
    
    return $name;

Ej. 1: split_name('Angeler Sherlee Mcgee') salidas:

array(
    'first_name' => 'Angeler',
    'middle_name' => 'Sherlee',
    'last_name' => 'Mcgee'
);

Ej. 2: split_name('Angeler Mcgee') salidas:

array(
    'first_name' => 'Angeler',
    'middle_name' => '',
    'last_name' => 'Mcgee'
);

Otra manera – Sans Regex

Decidió agregar otra forma que no usa expresiones regulares.

También tiene return false; para nombres no reconocibles (nullvacío stringdemasiados grupos de palabras para inferir).

Salidas

Array
(
    [first_name] => Angela
    [middle_name] => NULL
    [last_name] => Mcgee
)

Array
(
    [first_name] => Angela
    [middle_name] => Bob
    [last_name] => Mcgee
)

Array
(
    [first_name] => Angela
    [middle_name] => NULL
    [last_name] => NULL
)

false

false

false

si tiene exactamente una entrada de 2 palabras, puede usar list()

list($firstname, $lastname) = explode(" ", $string);

de todos modos puedes usar explode()

$words = explode(" ", $string);

$firstname = $words[0];
$lastname = $words[1];
$third_word = $words[2];
// ..

Sección de Reseñas y Valoraciones

Si te ha resultado de ayuda este artículo, te agradeceríamos que lo compartas con otros programadores de esta manera nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *