128 votes

le moyen le plus propre de sauter un foreach si le tableau est vide

Ce n’est pas un problème majeur, mais je me demandais s’il existait une méthode plus propre. Il serait bon d'éviter d'imbriquer mon code avec une instruction if inutile. Si $items est vide, php génère une erreur.

 $items = array('a','b','c');

if(!empty($items)) { // <-Remove this if statement
  foreach($items as $item) {
    print $item;
  }
}
 

Je pourrais probablement simplement utiliser le suppresseur d'erreur '@', mais ce serait un peu hacky.

221voto

Christian Points 12142

Il y a un million de façons de le faire.

La première serait d’exécuter le tableau dans foreach de toute façon, en supposant que vous en ayez un.

Dans d'autres cas, c'est ce dont vous pourriez avoir besoin:

   foreach((array)$items as $item) {
    print $item;
  }
 

Remarque: Si vous convertissez une valeur dans un tableau, vous obtenez un tableau, quelle que soit sa valeur. Par exemple, null, true, false donnent tous un tableau vide.

29voto

Le meilleur moyen consiste à initialiser chaque variable sanglante avant utilisation.
Cela ne résoudra pas seulement ce "problème" idiot, mais vous épargnera également une tonne de vrais maux de tête.

Donc, introduire les éléments $ en tant que $items = array(); est ce que vous vouliez vraiment .

28voto

Matt Williamson Points 10894
$items = array('a','b','c');

if(is_array($items))) {
  foreach($items as $item) {
    print $item;
  }
}

16voto

Zach Rattner Points 5849

Je ne recommanderais pas supprimer la sortie d’avertissement. J’ai, cependant, conseille d’utiliser is_array au lieu de ! vide. Si $items se trouve être un scalaire non nul, alors la boucle foreach sera toujours erreur si vous utilisez ! vide.

6voto

FractalizeR Points 12887

Je pense que la meilleure approche ici est de planifier votre code afin que $items est toujours un tableau. La solution la plus simple consiste à initialiser en haut de votre code avec $items=array(). De cette façon qu'il représentera un tableau vide même si vous n’y attribuer aucune valeur.

Toutes les autres solutions sont assez sales hacks pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X