décalage non défini lors de l'utilisation de php explode()

j'ai écrit ce que je pensais être une utilisation très simple de la fonction php explode() pour séparer un nom en prénom et nom de famille:

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

cependant, cela provoque une erreur php avec le message "Undefined offset: 1" . La fonction semble toujours fonctionner, mais j'aimerais clarifier ce qui cause l'erreur. J'ai vérifié le manuel php mais leurs exemples utilisent la même syntaxe que ci-dessus. Je pense que je comprends ce qu'est un décalage non défini est, mais je ne vois pas pourquoi mon code qui génère l'erreur!

15
demandé sur SilentGhost 2009-11-27 13:11:12

5 réponses

c'est parce que votre nom ne contient pas d'espace. Vous pouvez utiliser un truc simple pour s'assurer que l'espace est toujours là où

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

(notez l'espace entre les guillemets)

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

  list($first, $last) = explode(' ', "$fullname ");
36
répondu user187291 2009-11-27 10:18:22

cela pourrait être dû au fait que $fullname ne contenait pas de caractère d'espace.

cet exemple devrait corriger votre problème sans afficher cet avis:

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

maintenant si $fullname est "musoNic80" vous n'obtiendrez pas de message de notification.

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

HTH Elias

4
répondu Elias Bachaalany 2012-03-17 14:11:28

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

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

vous finirez avec des messages comme "Welcome back Ana de" ou "profil de montage de Monsour La".

il en sera de même pour les noms à deux mots comme" Anne Marie Miller"," William Howard Taft", etc.

juste un conseil.

4
répondu Jhourlad Estrella 2015-12-29 03:17:09

vraisemblablement, quoi que $fullname soit ne contient pas d'espace, donc $split est un tableau contenant un seul élément, donc $split[1] se réfère à un décalage non défini.

2
répondu Dominic Rodger 2009-11-27 10:16:36

c'est étrange, ça fonctionne correctement ici. Quand 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 quand vous avez l'erreur?

0
répondu Ben 2009-11-27 10:17:38