2010-06-02 5 views
1

Je dois développer un site sur PHP 5.1.6 et je viens de rencontrer un bug sur mon site qui ne se produit pas sur 5.2+. En utilisant foreach() pour itérer sur un objet, j'obtiens l'erreur suivante: "Erreur fatale: Les objets utilisés comme tableaux dans post/pré incrément/décrément doivent renvoyer des valeurs par référence ..."Comment faire une itération sur un tableau d'objets sans foreach et ArrayAccess

Est-ce que quelqu'un sait comment convertir la boucle foreach suivante à une construction qui fonctionnera avec 5.1.6? Merci d'avance!

foreach ($post['commercial_brands'] as $brand) 
        { 
         $comm_food = new Commercial_food_Model; 
         $comm_food->brand = $brand; 
         $comm_food->feeding_type_id = $f_type->id; 
         $comm_food->save(); 
        } 
+0

$ post [ 'de commercial_brands'] est un objet? –

Répondre

0
for ($i = 0; $i < count($post['commercial_brands']); $i++) 
{ 
    $comm_food = new Commercial_food_Model; 
    $comm_food->brand = $post['commercial_brands'][$i]; 
    $comm_food->feeding_type_id = $f_type->id; 
    $comm_food->save(); 
} 
+0

Merci Coronatus, pas sûr pourquoi je pensais que ce serait plus compliqué qu'une bonne vieille pour la boucle! – kenny99

1

Améliorant la réponse de Coronatus:

$max = count($post['commercial_brands']); 
for ($i = 0; $i < $max; $i++) 
{ 
    $comm_food = new Commercial_food_Model; 
    $comm_food->brand = $post['commercial_brands'][$i]; 
    $comm_food->feeding_type_id = $f_type->id; 
    $comm_food->save(); 
} 

Vous ne devriez jamais avoir une fonction dans l'état d'une boucle, parce que chaque fois que la boucle va autour d'elle exécutera la fonction.

+0

Incorrect. PHP n'est pas stupide. Il ne compte que $ post une fois. –

+1

En fait, j'ai raison. Il est bien connu que vous devez déterminer le nombre maximum de fois que for() doit boucler _avant la boucle. – Joshua

+0

C'est pourquoi il est possible de changer le nombre d'entrées dans un tableau _inside_ a pour une boucle et de toujours l'itérer dans chaque boucle. – Joshua

1
$x = 0; 
$length = count($post['commercial_brands']); 
while($x < $length){ 
    $comm_food = new Commercial_food_Model; 
    $comm_food->brand = $post['commercial_brands'][$x]; 
    $comm_food->feeding_type_id = $f_type->id; 
    $comm_food->save(); 
    $x++; 
} 

// tandis que 4 eva

Questions connexes