2010-09-28 6 views
1

Je n'ai absolument aucune idée de ce que je fais de mal en ce moment. Je pense que je suis mentalement épuisé, parce que je suis complètement désemparé. Voici le code que j'utilise:Argument invalide fourni pour foreach()

if(empty($this->updates) || !is_array($this->updates)) 
    return null; 

foreach($this->updates as $update) 

Ceci échoue. Cependant, si je fais un print_r ($ this-> updates) avant le foreach (et après), cela fonctionne parfaitement bien. Pourquoi est-ce que lorsque j'essaie de l'utiliser dans un foreach, il prétend que le tableau n'existe pas?

Exemple print_r ($ this-> Mises à jour):

Array 
(
    [0] = Array 
    (
     [id] => 1 
     [name] => test 
    ) 
    [1] = Array 
    (
     [id] => 2 
     [name] => rawr 
    ) 
) 
+1

Cette erreur se produit généralement si vous essayez de transmettre une chose * autre que * un tableau dans un 'foreach'. Qu'est-ce que votre 'print_r' retourne? –

+0

pouvons-nous voir le résultat de 'print_r'? – fredley

+0

Pouvez-vous dire utiliser le résultat de var_dump ($ this-> updates)? De plus, vous devriez ajouter if (! Isset ($ this-> updates) || vide ($ this-> updates)) – Shikiryu

Répondre

1

Puisque vous ne dites pas ce que $this->updates est, je peux simplement supposer que ce n'est pas un tableau. Ici, vous avez deux options:

1- Remplacez empty() par !is_array() pour vérifier si $this->updates est valide ou non. Si elle est vide, il n'a pas d'importance, le foreach va simplement ne rien faire ...

if(!is_array($this->updates)) 
    return null; 

foreach($this->updates as $update) 

Ou si le foreach n'est pas le seul traitement que vous faites:

if(empty($this->updates) || !in_array($this->updates)) 
    return null; 

foreach($this->updates as $update) 

2- Force de $this->updates à être un tableau

if(empty($this->updates)) 
    return null; 

foreach((array) $this->updates as $update) 
+0

$ this-updates J'ai déjà posté les résultats d'un print_r dans la question originale – Nathan

+0

@Atrox, est-ce que ce code est exécuté deux fois? Peut-être que le premier passage fonctionne, mais échoue sur le second (ou vice versa)? Il n'y a AUCUNE façon pour que 'foreach' échoue si' $ this-> updates' est ** toujours ** en effet un tableau –

+0

Il est exécuté environ 90 fois sur une page, et parfois cela fonctionne, parfois non. avant le foreach, ça marche 100% du temps – Nathan

1

On dirait $this->updates n'est pas vide mais son pas un tableau. Vous pouvez utiliser le test is_array avant de l'utiliser dans foreach:

if(is_array($this->update)) { 
    foreach($this->updates as $update) { 
    ..... 
} 
} 
+0

$ this-updates contient certainement des entrées.Pour le morceau de code sur lequel je travaille, il y a 27 tableaux dans les mises à jour.J'ai posté les résultats d'un exemple print_r dans la question originale – Nathan

Questions connexes