IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

foreach sur tableau vide


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut foreach sur tableau vide
    Bonjour,
    il semble qu'un foreach auquel on passe un tableau vide génère une erreur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var_dump($this['data']);
    if (empty($this['data'])) $this['data']=[];
       foreach ($this['data'] as $row) {
             var_dump($row);
      }
    C:\projets\arnaudmarion\src\view\block\temoignages.php:7:string '' (length=0)


    ( ! ) Warning: foreach() argument must be of type array|object, string given in C:\projets\arnaudmarion\src\view\block\temoignages.php on line 9
    C'est normal ?

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 435
    Par défaut
    Bonjour,

    Non un tableau vide dans un foreach ne déclenche pas d'erreur, mais il faut s'assurer que la variable est bien un tableau ou un type itérable.
    Ton message d'erreur indique que ta variable est une chaine de caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $tab = [];
     
    if (is_iterable($tab)) {
      foreach($tab as $item) {
     
      }
    }

  3. #3
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Je ne sais même plus si cela existe...

    En ligne 2 tu as écris ton if sur une seule ligne, ce n'est pas la norme PSR qui, comme ci-dessous, se fait sur trois lignes.

    Peux-tu adapter ton code et voir si cela résous ton souci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if(condition) {
            // action
        }

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    must be of type array|object, string given
    Je ne crois pas que le code que tu montres reflête la réalité vue que d'aprés le message $this['data'] contient toujours une chaîne arrivé au foreach.

    Sinon, boulcer sur un tableau vide ne pose pas de problème, il y a juste 0 tour de boucle.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci pour vos réponses.
    En effet, le message d'erreur ne colle pas avec le code que je montre.
    C'était surtout pour ma culture, sachant que ça s'est produit suite à un bug mais dans la vraie vie ne devrait jamais arriver. On va pas s'embêter.

  6. #6
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Étrange de poster un code qui 'e correspond pas au problème...

    Pour ta culture : il est inutile de faire un test type "si pas vide" avant un foreach qui fait déjà ce test (puisqu'il doit savoir le nombre d'occurrences avant de commencer).

    Un foreach sur un tableau vide est parfaitement accepté, zéro souci.

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Étrange de poster un code qui ne correspond pas au problème...
    En effet ; ce message d'erreur existait avant que je rajoute la ligne 2...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. foreach sur tableau multi dimensions
    Par Andrea_Pesaro dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/03/2021, 22h51
  2. Boucle foreach sur tableau devenu inaccessible
    Par Lhtldrn dans le forum C#
    Réponses: 1
    Dernier message: 08/07/2012, 11h23
  3. Action<> et ForEach sur tableau
    Par Papy214 dans le forum C#
    Réponses: 2
    Dernier message: 08/06/2011, 12h15
  4. foreach sur un tableau à plusieurs dimensions
    Par Peanut dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2007, 14h04
  5. test sur tableau vide
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 11/10/2006, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo