with w3school parse multiexplode for array php explode

w3school - Desplazamiento indefinido al usar php explode()



split with php (5)

Eso es extraño, está funcionando correctamente aquí. Cuando intento con una cuerda, the cat walks y también lo hará y no producirá un error. Lo he imprimido con print_r

¿Cómo se ve tu $fullname cuando recibes el error?

He escrito lo que pensé que era un uso muy simple de la función php explode() para dividir un nombre en nombre y apellido:

// split name into first and last $split = explode('' '', $fullname, 2); $first = $split[0]; $last = $split[1];

Sin embargo, esto está generando un error de php con el mensaje "Undefined offset: 1" . La función todavía parece funcionar, pero me gustaría aclarar lo que esté causando el error. He comprobado el manual de php pero sus ejemplos utilizan la misma sintaxis que la anterior. Creo que entiendo lo que es un desplazamiento indefinido, ¡pero no puedo ver por qué mi código está generando el error!


Esto podría deberse al hecho de que $fullname no contenía un carácter de espacio.

Este ejemplo debería solucionar su problema sin mostrar este aviso:

$split = explode('' '', $fullname, 2); $first = @$split[0]; $last = @$split[1];

Ahora, si $fullname es "musoNic80" no recibirá un mensaje de aviso.

Tenga en cuenta el uso de "@" caracteres.

HTH Elias


Por cierto, ese algoritmo no funcionará todo el tiempo. Piense en nombres de apellidos latinos o italianos de dos palabras como "De Castro", "Dela Cruz", "La Rosa", etc. Split devolverá 3 en lugar de 2 palabras:

Array { [0] => ''Pedro'' [1] => ''De'' [1] => ''Castro'' }

Terminarás con mensajes como "Bienvenido de nuevo a Ana De" o "Perfil de edición de Monsour La".

Lo mismo ocurrirá con los nombres de dos palabras como "Anne Marie Miller", "William Howard Taft", etc.

Solo un consejo.


Presumiblemente, cualquiera que sea $fullname no contiene un espacio, por lo que $split es una matriz que contiene un solo elemento, por lo que $split[1] refiere a un desplazamiento indefinido.


esto se debe a que su nombre completo no contiene un espacio. Puedes usar un truco simple para asegurarte de que el espacio esté siempre donde

$split = explode('' '', "$fullname ");

(note el espacio dentro de las comillas)

Por cierto, puedes usar la función list () para simplificar tu código

list($first, $last) = explode('' '', "$fullname ");