10
votes

PHP: décalage indéfini dans l'explosion ()

J'ai ceci:

if(!$lastname) { $lastname = $firstname; }


0 commentaires

5 Réponses :


1
votes

Vous n'obtenez pas une erreur em>, mais un avis em>.

Bien que cela soit acceptable em> puisque PHP est une langue dynamique, Vous pouvez l'empêcher avec IMSET () CODE> : P>

$name = explode(' ', $queryString);

if (isset($name[1])) {
  // show lastname
}
else {
  // show firstname
}


3 commentaires

L'avis vient à l'explosion (), alors même si j'enveloppe le si dans Isset (), il apparaît encore


@Jason McCrearty Isset n'empêche pas l'avis, car il est jeté dans la liste affectation


@brian_d, tu as raison. Je n'encouragerais pas l'utilisation de liste () dans ce cas alors.



4
votes

Essayez d'ajouter un espace:

list($firstname, $lastname) = explode(' ', $queryString . ' ' );


0 commentaires

34
votes
list($firstname, $lastname) = array_pad(explode(' ', $queryString, 2), 2, $queryString);

6 commentaires

+1 solution intéressante. Bien que je discute, il est excessivé pour une chose aussi simple.


Je ne peux pas suivre ... La première solution ajoute simplement un seul appel de la fonction. C'est un appel unique, pas "Overkill". array_pad () est la fonction, qui est (et est conçue pour) exactement ce cas d'utilisation: s'assurer qu'il y a au moins x . En disant "son overkill", vous dites également que array_pad () est totalement inutile.


Ralentir là-bas roi . C'est un peu d'étirement - Overkill = array_pad () est inutile . Je n'ai dit rien de tel. Comme je l'ai souligné, c'est une solution intéressante. Mais, je maintiens 3 appels de fonction quand 1 ferait est Overkill . De plus, je pense que je pense stocker le prénom, dans une variable appelée $ Nom est inincuté et conduit à un code médiocre. Je préférerais encourager l'op de le faire mieux que de le faire fonctionner.


@Jasonmccreary j'ai deux appels de fonction Appels de fonction (Rappelez-vous, que liste () est une construction de langue), ce qui est en plus des fonctions natives C, et que vous avez un appel de fonctions, mais un supplémentaire si -Construction. Si vous pouvez fiables mesurez une différence significative , que je ne suis peut-être accepté, qu'il s'agit d'une excédence.


Peut-être que quelqu'un pourrait-il me dire, pourquoi j'ai 2 serveurs - un avec PHP 5.2.6 et la seconde avec 5.3.3, - et je reçois l'erreur décalage indéfini uniquement dans 5.3.3, tandis que le Le même code sur les mêmes données fonctionne correctement dans 5.2.6?


@Stan probablement à cause de error_rporting -Settings, mais pour être honnête: je ne suis pas sûr, si cela est lié à cette question / réponse :?



0
votes

Je ne suis pas clair pourquoi cela fonctionne, mais la notification disparaîtra. Tout d'abord, avec ce code, je reçois l'avis de décalage indéfini: xxx

Cependant, avec ce code, je n'ai pas: xxx

aussi Remarque, avec '-' ou '-' annexé à $ DateToChange, je vais obtenir l'avis de compensation. Il faut trois tirets pour que cela puisse partir dans mon exemple avec quatre variables. Junk de $ contient les deux tirets (un étant un séparateur).


1 commentaires

Il est préférable de ne pas simplement fournir des hacks - il est donc préférable de raisonner derrière des réponses.



1
votes

Je viens de courir dans ça aujourd'hui. ma solution n'était pas ce qui précède, (qui n'avait aucun effet) le mien était le suivant: xxx

au lieu de faire: xxx


0 commentaires