Discussion:
Incrément dans une boucle for
(trop ancien pour répondre)
Didier
2022-08-11 13:42:51 UTC
Permalink
Bonjour,
Est-il possible d'incrémenter la variable d'une boucle for autrement que
de 1 ?
Je voudrais un truc du genre :
$intervalle=20;
for($i=0;$i<100;$i+intervalle)
Je me heurte à une erreur :
Allowed memory size of 134217728 bytes exhausted (tried to allocate
100663304 bytes)
(je ne sais pas si c'est directement lié à mon incrément).
Sur Internet, on ne voit que des exemples de type $i++, même si la
syntaxe qui semble officielle est for (expr1,expr2,expr3), expr3 étant
une expression évaluée.
Merci.
Didier.
Olivier Miakinen
2022-08-11 15:02:52 UTC
Permalink
Post by Didier
Bonjour,
Est-il possible d'incrémenter la variable d'une boucle for autrement que
de 1 ?
Oui.
Post by Didier
$intervalle=20;
for($i=0;$i<100;$i+intervalle)
for($i=0;$i<100;$i+=intervalle)

Soit dit en passant, je préfère pour ma part du code plus aéré :

for ($i = 0; $i < 100; $i += intervalle)
Post by Didier
Allowed memory size of 134217728 bytes exhausted (tried to allocate
100663304 bytes)
C'est normal si tu fais des allocations dans ta boucle.

Avec $i = 0 qui n'est jamais incrémenté, la valeur de ($i + intervalle)
est égale à intervalle à chaque tour de boucle, cela fait donc une
boucle infinie.
Post by Didier
(je ne sais pas si c'est directement lié à mon incrément).
Donc non. Tu ne fais aucun incrément, et le problème d'allocation doit
avoir lieu quelque part dans la boucle.
Post by Didier
Sur Internet, on ne voit que des exemples de type $i++
En effet, il est dommage que sur cette page ils ne parlent pas de la
possibilité d'incrémenter ou décrémenter d'une valeur autre que 1 :
https://www.php.net/manual/fr/language.operators.increment.php

C'est dans les opérateurs d'affectation que l'on voit la syntaxe
$a += $b :
https://www.php.net/manual/fr/language.operators.assignment.php

Note que c'est une syntaxe raccourcie, et que l'affectation normale
conviendrait tout aussi bien, à savoir :
$a = $a + 1 au lieu de $a++
$a = $a - 1 au lieu de $a--
$a = $a + 2 au lieu de $a += 2
et ainsi de suite.


Pour en revenir à ton exemple, tu pouvais donc écrire :

for ($i = 0; $i < 100; $i = $i + intervalle)
--
Olivier Miakinen
Didier
2022-08-11 17:03:19 UTC
Permalink
Post by Olivier Miakinen
Post by Didier
$intervalle=20;
for($i=0;$i<100;$i+intervalle)
for($i=0;$i<100;$i+=intervalle)
Oups oui, j'ai dû faire une erreur en recopiant mon code, ou alors mon
problème était là. Depuis d'ai simplifié mon code, et j'ai pu me ramener
à une boucle où j'incrémente en faisant $i++.
Mais je viens d'essayer ta proposition, ça fonctionne.
Post by Olivier Miakinen
for ($i = 0; $i < 100; $i += intervalle)
Post by Didier
Allowed memory size of 134217728 bytes exhausted (tried to allocate
100663304 bytes)
C'est normal si tu fais des allocations dans ta boucle.
Oui je fais une allocation d'une valeur dépendant de $i dans un tableau.
Mais rien sur la variable de boucle elle-même.
Post by Olivier Miakinen
Avec $i = 0 qui n'est jamais incrémenté, la valeur de ($i + intervalle)
est égale à intervalle à chaque tour de boucle, cela fait donc une
boucle infinie.
Je devais être dans cette situation, mais comme mon code finissait pas
ne pas être trop clair, j'ai tout repris à zéro, et comme d'hab le plus
simple s'est montré le plus efficace et a le mieux marché.

En tout cas merci pour ton aide rapide, ça ouvre toujours les yeux sur
le truc plus gros que nous et qu'on ne voit pas au beau milieu de notre
code.
Et je suis rassuré de savoir qu'on peut incrémenter d'un pas supérieur à
1, voir un pas évalué.

Didier.

Continuer la lecture sur narkive:
Loading...