web-dev-qa-db-fra.com

décalage indé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 diviser un nom en prénom et nom:

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

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

16
musoNic80

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

 $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
user187291

Cela pourrait être dû au fait que $fullname ne contenait pas d'espace.

Cet exemple devrait résoudre votre problème sans l'affichage de cette notification:

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

Maintenant, si $fullname est "musoNic80", vous ne recevrez pas de message de notification.

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

HTH Elias

4
Elias Bachaalany

BTW, cet algorithme ne fonctionnera pas tout le temps. Pensez à des noms de famille latinos ou italiens à deux mots, tels que "De Castro", "Dela Cruz", "La Rosa", etc.

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

Vous obtiendrez des messages tels que "Welcome back Ana De" ou "Modification du profil de Monsour La".

La même chose se passera pour des noms à deux mots comme "Anne Marie Miller", "William Howard Taft", etc.

Juste un pourboire.

4
Jhourlad Estrella

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

2
Dominic Rodger

C'est étrange, ça marche bien ici. Quand j'essaie avec une chaîne the cat walks et aussi juste the fera et ne produira pas d'erreur Je l'ai sorti avec print_r

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

0
Ben