2009-11-27 34 views
14

He escrito lo que pensaba que era un uso muy simple de la función php explode() para dividir un nombre en nombre y un apellido:Undefined offset Cuando se usa PHP explode()

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

Sin embargo, esto está vomitando 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. Revisé php manual pero sus ejemplos usan la misma sintaxis que la anterior. Creo que entiendo qué es una compensación indefinida, pero no puedo ver por qué mi código genera el error.

+8

¿Puede proporcionar el valor de '$ fullname' que le da el error? –

Respuesta

36

esto es porque su nombre completo no contiene un espacio. Puede utilizar un truco sencillo para asegurarse de que el espacio está siempre donde

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

(Observa el espacio dentro de las comillas)

Por cierto, función list() se puede utilizar para simplificar el código

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

+1 para el uso de 'list()'. – jensgram

+0

Eso es genial. No me di cuenta de que podía poner una variable dentro de las comillas. Además, gracias por la sugerencia de la lista de bonificaciones(). – musoNic80

+0

Todo un truco elegante. ;) – Gustav

2

Es de suponer que 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] se refiere a un desplazamiento indefinido.

3

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

Este ejemplo debería arreglar el problema w/o exponer este aviso:

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

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

Tenga en cuenta el uso de los caracteres "@".

HTH Elias

+3

Tiene sentido, pero prefiero encontrar una forma de solucionar el problema en lugar de suprimir los errores. ¡Gracias sin embargo por explicar la causa! – musoNic80

0

Esa extraña, que está funcionando correctamente aquí. Cuando intento con una cadena the cat walks y también solo the, haré y no produciré un error. Lo he entregado con print_r

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

+0

con print_r obtengo una matriz normal .. – Ben

4

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

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

que va a terminar con mensajes como "Bienvenido de nuevo Ana De" o "Editar perfil de Monsour La".

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

Sólo un consejo.

Cuestiones relacionadas