suite croissante

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2009, 02:31

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.

Eléphant du PHP | 451 Messages

29 déc. 2009, 02:58

Fait un tableau avec array() et ensuite vérifie dans ta boucle si $i est dans le tableau grâce à in_array()

ViPHP
ViPHP | 5462 Messages

29 déc. 2009, 03:32

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     } } 

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2009, 11:37

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 déc. 2009, 12:31

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-| )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 5462 Messages

29 déc. 2009, 17:10

ouai c'est pas tres important,
juste un reflex d'optimisation === etant plus rapide que == :wink:

ViPHP
ViPHP | 4039 Messages

29 déc. 2009, 17:36

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.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 672 Messages

29 déc. 2009, 17:51

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:

ViPHP
ViPHP | 5462 Messages

29 déc. 2009, 21:40

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