web-dev-qa-db-fra.com

Module dans une boucle PHP

Je vérifie actuellement si une entrée dans une boucle est la troisième itération ou non, avec le code suivant:

<?php for ($i = 0; $i < count($category_news); $i++) : ?>

    <div class="grid_8">
        <div class="candidate snippet <?php if ($i % 3 == 2) echo "end"; ?>">
            <div class="image shadow_50">
                <img src="<?php echo base_url();?>media/uploads/news/<?php echo  $category_news[$i]['url']; ?>" alt="Image Preview" width="70px" height="70px"/>
            </div>
               <h5><?php echo $category_news[$i]['title']?></h5>
            <p><?php echo strip_tags(Word_limiter($category_news[$i]['article'], 15)); ?></p>
            <?php echo anchor('/news/article/id/'.$category_news[$i]['news_id'], '&gt;&gt;', array('class' => 'forward')); ?>
        </div>
    </div>

    <?php if ($i % 3 == 2) : ?>
         </li><li class="row">
    <?php endif; ?>

<?php endfor; ?>

Comment puis-je vérifier si la boucle est dans sa deuxième et non sa troisième itération?

J'ai essayé $i % 2 == 1 en vain.

15
Udders

Le module vérifie ce qui reste d'une division.

Si $ i est 10, 10/2 = 5 sans restes, alors $ i module 2 serait 0.
Si $ i est 10, 10/3 = 3 avec un reste de 1, donc $ i module 3 serait 1.

Pour vous permettre de suivre plus facilement le nombre d'articles, je commencerais $ i à partir de 1 au lieu de 0.

for($i=1; $i <= $count; $i++)
    if($i % 2 == 0) echo 'This number is even as it is divisible by 2 with no leftovers! Horray!';

J'espère que c'est compréhensible. Shai.

17
Shai Mishali

En cas de doute, écrivez un extrait de code :

for ($j = 1; $j < 4; $j++)
{
   for ($k = 0; $k < $j; $k++)
   {
      echo "\n\$i % $j == $k: \n";

      for ($i = 0; $i < 10; $i++)
      {
         echo "$i : ";
         if ($i % $j == $k)
         {
            echo "TRUE";
         }
         echo " \n";
      }
   }
}

Voici la sortie. Utilisez-le pour comprendre ce que vous devez utiliser:

$i % 1 == 0: 
0 : TRUE 
1 : TRUE 
2 : TRUE 
3 : TRUE 
4 : TRUE 
5 : TRUE 
6 : TRUE 
7 : TRUE 
8 : TRUE 
9 : TRUE 

$i % 2 == 0: 
0 : TRUE 
1 :  
2 : TRUE 
3 :  
4 : TRUE 
5 :  
6 : TRUE 
7 :  
8 : TRUE 
9 :  

$i % 2 == 1: 
0 :  
1 : TRUE 
2 :  
3 : TRUE 
4 :  
5 : TRUE 
6 :  
7 : TRUE 
8 :  
9 : TRUE 

$i % 3 == 0: 
0 : TRUE 
1 :  
2 :  
3 : TRUE 
4 :  
5 :  
6 : TRUE 
7 :  
8 :  
9 : TRUE 

$i % 3 == 1: 
0 :  
1 : TRUE 
2 :  
3 :  
4 : TRUE 
5 :  
6 :  
7 : TRUE 
8 :  
9 :  

$i % 3 == 2: 
0 :  
1 :  
2 : TRUE 
3 :  
4 :  
5 : TRUE 
6 :  
7 :  
8 : TRUE 
9 :  
8
Gustav Bertram

Maintenant pour la réponse:

$i % 2 === 0

7
PeeHaa

pour chaque troisième itération dont vous avez besoin

if ($i % 3 === 0) 

si la troisième itération particulière alors

if ($i === 3)   
1
Gfox

Je pense que ça devrait être:

if ($i % 2 == 0) 
0
Sudhir Bastakoti

Essayez ceci, devrait fonctionner pour chaque 3e itération:

if ($i % 3 === 0) 
0
Riz