2012-04-17 11 views
2

в PHP, я делаю петлю, что-то вроде какесть лучший, более простой способ?

$x = 0; 

    for ($i = 0; $i < 100; $i++) 
    { 
     if ($x == 3) //better way to do this? in this example, determine every 3 times in a loop 
     { 
      //"do something" 
      $x = 0; 
     } 

     $x++; 

, как вы можете видеть, что я делаю что-то в цикле каждые 3 раз она идет вокруг, но вопрос в том, есть ли лучший, более простой способ выяснить, пришло ли время для «чего-то» в цикле?

+0

Ну, что вы сделали это хорошо, потому что оператор% гораздо дороже, чем простое сравнение, и это не делает код любой более простой. – invisal

+0

'% оператор намного дороже простого сравнения. - Интересно ... у вас есть ссылка? –

+0

Команда @JustinEthier [CMP] (http://www.penguin.cz/~literakl/intel/c.html#CMP) использует от 2 до 3 часов, а [DIV] (http://www.penguin.cz/ ~ literakl/intel/d.html # DIV) использует 40 часов для процессора Intel. – invisal

ответ

5

Вы могли бы использовать по модулю:

if(($i % 3 == 0) && ($i > 0)) 
{ 
    ... 
} 

(не забудьте проверить, если это выше 0 или он получит в случае на первой итерации

3

Вы можете использовать модуль. оператор %, чтобы увидеть, если $ я делится на три, которые должны держать вас от управления $ х

0

Используйте модуль на $ я:.

for ($i = 0; $i < 100; $i++) 
{ 
    if($i % 3 == 0) 
    { 
     // do something 
    } 
} 
3

Вместо того, чтобы использовать $x, просто проверьте if($i > 0 && $i % 3 == 0). Если вы хотите, чтобы что-то произошло и при первом запуске, просто снимите часть $i > 0 &&.

+0

+1 Важно также иметь это первое условие. – Josh

2

Fizzbuzz huh? Вы хотите, чтобы оператор Modulo -%

if ((6 % 3) == 0) { 
    echo "is divisable by three"; 
} 
0
for ($i = 0; $i < 100; $i++) { 
    { 
     if($i%3==0){ 
     //Do Something 
    } 
} 
2

Вы можете избежать переменной $ х с помощью modulus operator:

if ($i % 3 == 0 && i > 0){ 
    // Do something 
} 

В основном это реализуется та же логика; каждая третья итерация, цикл будет запускать ваш дополнительный код.

+0

+1 для Fizzbuzz! – Andy

0

в этом коде:

for ($i = 0; $i < 100; $i++) 
    { 
     if(($i%3==0) && $i>0) 
     { 
      //Do Something #first will be after 4 time 
     } 
    } 

, но это одна:

for ($i = 1; $i <=100; $i++) 
    { 
     if($i%3==0) 
     { 
      //Do Something #even first will be after 3 time 
     } 
    } 
Смежные вопросы