2011-11-15 7 views
10

Estoy comprobando actualmente si una entrada en un bucle es la tercera iteración o no, con el siguiente código:php módulo en un bucle

<?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; ?> 

¿Cómo puedo comprobar si el circuito está en su segunda y no es su tercera iteración?

He intentado $i % 2 == 1 inútilmente.

Respuesta

12

cheques Modulus cuál es el sobrante de una división.

Si $ i es 10, 10/2 = 5 sin sobrante, por lo $ i módulo 2 sería 0.
Si $ i es 10, 10/3 = 3 con un resto de 1, por lo que $ i módulo 3 sería 1.

Para facilitarle el seguimiento del número de elementos, comenzaría $ i desde 1 en lugar de 0. ej.

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!'; 

Espero que sea comprensible. Shai.

0

creo que debe ser:

if ($i % 2 == 0) 
0

probar esto, debe trabajar por cada tercera iteración:

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

por cada tercera iteración necesita

if ($i % 3 === 0) 

si particular, tercera iteración continuación

if ($i === 3) 
8

Ahora la respuesta:

¿Cómo puedo comprobar el bucle está en su segunda interation no es el tercero que he intentado,

$i % 2 === 0 
7

En caso de duda, escribir snippet of 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"; 
     } 
    } 
} 

Aquí está la salida. Úselo para descubrir lo que necesita utilizar:

$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 : 
+1

¡Este es un fragmento muy útil! Guía de idiotas: aumentar el '4' en la primera línea generará más bucles con espacios más grandes antes de repetir. – phil