Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Incrément dans une boucle for

2 réponses
Avatar
Didier
Bonjour,
Est-il possible d'incrémenter la variable d'une boucle for autrement que
de 1 ?
Je voudrais un truc du genre :
$intervalle ;
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.

2 réponses

Avatar
Olivier Miakinen
Le 11/08/2022 Í  15:42, Didier a écrit :
Bonjour,
Est-il possible d'incrémenter la variable d'une boucle for autrement que
de 1 ?

Oui.
Je voudrais un truc du genre :
$intervalle ;
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)
Je me heurte Í  une erreur :
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.
(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.
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
Avatar
Didier
Le 11/08/2022 Í  17:02, Olivier Miakinen a écrit :
Le 11/08/2022 Í  15:42, Didier a écrit :
Je voudrais un truc du genre :
$intervalle ;
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.
Soit dit en passant, je préfère pour ma part du code plus aéré :
for ($i = 0; $i < 100; $i += intervalle)
Je me heurte Í  une erreur :
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.
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.