2009-11-27 4 views
14

J'ai écrit ce que je pensais était une utilisation très simple de la fonction php explode() pour diviser un nom en nom et prénom:Undefined offset lors de l'utilisation php explode()

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

Cependant, cela est en train de vomir une erreur PHP avec le message "Undefined offset: 1". La fonction semble toujours fonctionner, mais je voudrais éclaircir ce qui cause l'erreur. J'ai vérifié le php manual mais leurs exemples utilisent la même syntaxe que ci-dessus. Je pense que je comprends ce qu'est un offset non défini, mais je ne vois pas pourquoi mon code génère l'erreur!

+8

Pouvez-vous fournir la valeur de '$ fullname' qui vous donne l'erreur? –

Répondre

36

car votre nom complet ne contient pas d'espace. Vous pouvez utiliser une astuce simple pour vous assurer que l'espace est toujours là où

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

(notez l'espace à l'intérieur des guillemets)

BTW, vous pouvez utiliser la fonction list() pour simplifier votre code

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

+1 pour l'utilisation de 'list()'. – jensgram

+0

C'est génial. Je n'avais pas réalisé que je pouvais mettre une variable entre guillemets. Aussi, merci pour l'astuce du bonus 'list()'. – musoNic80

+0

Tout un hack élégant. ;) – Gustav

2

Vraisemblablement, quel que soit $fullname ne contient pas d'espace, $split est un tableau contenant un seul élément, donc $split[1] fait référence à un décalage non défini.

3

Cela peut être dû au fait que $fullname ne contenait pas de caractère espace.

Cet exemple devrait résoudre votre problème w/o afficher cet avis:

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

Maintenant, si $fullname est "musoNic80" vous ne serez pas un message d'avis.

Notez l'utilisation des caractères "@".

HTH Elias

+3

Ca a du sens, mais je préfère trouver un moyen de régler le problème plutôt que de supprimer les erreurs. Merci cependant d'avoir expliqué la cause! – musoNic80

0

Ce étrange, ça fonctionne correctement ici. Lorsque j'essaie avec une chaîne the cat walks et aussi juste the fera et ne produira pas une erreur. Je l'ai sorti avec print_r

À quoi ressemble votre $fullname lorsque vous obtenez l'erreur?

+0

avec print_r je reçois un tableau normal .. – Ben

4

BTW, cet algorithme ne fonctionnera pas tout le temps. Pensez à deux mots ou noms de famille Latina italienne des noms comme "De Castro", "Dela Cruz", "La Rosa", etc. de Split retournera 3 au lieu de 2 mots:

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

Vous finirez avec des messages comme "Bienvenue Ana De" ou "Modification du profil de Monsour La".

Même chose va se passer pour les noms de deux mots comme "Anne Marie Miller", "William Howard Taft", etc.

Juste un petit conseil.