Page 1 sur 1

suite croissante

Posté : 29 déc. 2009, 02:31
par Invité
Bonjour à tous,

J'ai une boucle php avec incrémentation comme ceci:
        $i = 0;
	foreach ($rows as $row)
	{

		//code...
	   $i++;
	}
$i va de 0 à + l'infini.
Ce que je voudrais faire:
exécuter une action dans la boucle à chaque fois que $i a la valeur:
1, ou 3, ou 7, ou 11, ou 15, ou 19, ou 23 ...

On peut voir qu'il y a une augmentation de 4 à chaque fois. Je n'arrive pas à exprimer cela en php, pourriez-vous me conseiller sur la marche à suivre?
Merci pour vos réponses.

Re: suite croissante

Posté : 29 déc. 2009, 02:58
par djtec
Fait un tableau avec array() et ensuite vérifie dans ta boucle si $i est dans le tableau grâce à in_array()

Re: suite croissante

Posté : 29 déc. 2009, 03:32
par stealth35
non, ca se fait avec les modulos ca

dans ta boucle (dans le cas ou les cléfs de tableau sont normales, sinon tu fais avec ton $c

Code : Tout sélectionner

foreach($data as $key => $value) {     if(($key % 4) === 1)     {           //do something     } } 

Re: suite croissante

Posté : 29 déc. 2009, 11:37
par Invité
Merci pour vos réponses.
Pourquoi i

f(($key % 4) === 1

et pas

f(($key % 4) == 1

Je sais que === est l'opérateur d'identité mais quel utilité ici?

Re: suite croissante

Posté : 29 déc. 2009, 12:31
par Ryle
Ce n'est effectivement pas utile ici, puisque le résultat d'une opération arithmétique sera un nombre :)
(encore que quand j'étais en cm1, je tombais souvent sur des booléens ou des chaines de caractères 8-| )

Re: suite croissante

Posté : 29 déc. 2009, 17:10
par stealth35
ouai c'est pas tres important,
juste un reflex d'optimisation === etant plus rapide que == :wink:

Re: suite croissante

Posté : 29 déc. 2009, 17:36
par Berzemus
ouai c'est pas tres important,
juste un reflex d'optimisation === etant plus rapide que == :wink:
Le genre d'optimisations qui ne valent même pas le temps qu'on leur accorde... :mrgreen:

Ce qui importe c'est le sens de l'expression, pas sa vitesse d'exécution.

Re: suite croissante

Posté : 29 déc. 2009, 17:51
par macgawel
ouai c'est pas tres important,
juste un reflex d'optimisation === etant plus rapide que == :wink:
Le genre d'optimisations qui ne valent même pas le temps qu'on leur accorde... :mrgreen:

Ce qui importe c'est le sens de l'expression, pas sa vitesse d'exécution.
Un autre intérêt, c'est de prendre l'habitude d'utiliser le bon opérateur.

Parce que s'il n'y a pas de problème ici, dans d'autres cas on peut se retrouver avec des effets de bord et/ou des failles de sécurité.
Au moins, en prenant l'habitude d'utiliser le bon opérateur au bon endroit, on prend les bons reflexes...

Sinon, pour répondre au problème de départ et si on ne fait rien dans les autres cas, je partirais plutôt sur :
$count = $count($rows);
for ($i = 1; $i < $count; $i+= 4 ) {
// code en prenant $rows[$i]
}
Ca évite de passer les trois-quarts du temps à boucler dans le vide :mrgreen:

Re: suite croissante

Posté : 29 déc. 2009, 21:40
par stealth35
ouai c'est pas tres important,
juste un reflex d'optimisation === etant plus rapide que == :wink:
Le genre d'optimisations qui ne valent même pas le temps qu'on leur accorde... :mrgreen:

Ce qui importe c'est le sens de l'expression, pas sa vitesse d'exécution.
oui et non je d'accord avec toi sur le principe que c'est hyper minime, par contre
c'est la bonne expression et la seul qu'on devrai t'uiliser dans ce cas puisque qu'on comprare un nombre avec un autre nombre :

1 == '1' //true
1 === '1' //false