这个循环的模数逻辑是否正确?

时间:2011-05-10 01:01:32

标签: php javascript loops logic

所以这是我正在寻找的模式

在有限集中,我想要检索一组的前2个值,然后是另一个集合的接下来的4个值,然后是第一个集合的2个,然后是另一个集合的4个,依此类推。

抓住2 |抢4 |抢2 |抢4 ...

$count = 0;
foreach ($listing as $entry){
  if ($count % 4 == 0){
       // add to 4-item set
  } else if ($count % 2 == 0){
       // add to 2-item set
  }
  $count++;
}

我的困惑是,当$ count%4 = 0时,$ count%2也将= 0。

如果我没有达到错误的模数情况(因为对于任何可被4整除的任意数字都是正确的),我应该通过检查第一,如果$ count%4 == 0?

3 个答案:

答案 0 :(得分:1)

不正确

当计数为2,8,14等时,你应该抓住设置1

目前,当你的数量是2,4,8等时,你会抓住它

当计数为6,12,18等时设置2

目前它的数量是4,8,12等

条件1是((count-2) % 6) == 0

条件2是(count != 0) && (count % 6) == 0

这是应该有用的东西

$count = 0;
foreach ($listing as $entry){
  if ($count < 2){
       // add to 2-item set
  } else {
       // add to 4-item set
  }

  if ($count < 6) $count++; 
  else $count = 0;
}

或者,如果您想一次抓取2/4件物品:

$count = 0;
foreach ($listing as $entry){
  if ($count == 2){
       // add 2 items to 2-item set
  } elseif ($count == 6) {
       // add 4 items to 4-item set
  }

  if ($count < 6) $count++; 
  else $count = 0;
}

答案 1 :(得分:1)

如果我做对了,你所希望的发行实际上是:

A A, B B B B, A A, B B B B, A A, B B B B, ...

所以你想将它们分组为 ,然后将前两个选为A,将其他四个分为B:

if ($count % 6 < 2){
   // add to 2-item set
}
elseif ($count % 6 < 6){
   // add to 4-item set
}

将其拆分为if / elseif将确保这些项目最终只能在一个项目中结束。 < n分布的% 6比较意味着:

$count % 6 =    0  1  2  3  4  5  0
        if =   <2 <2 <6 <6 <6 <6 <2
    basket =    A  A  B  B  B  B  A

答案 2 :(得分:0)

由于您指定的确切原因,这不起作用。

可以使这个工作的方法是

  1. 使用6的模数,然后每次模块6,将从count - 6开始的前两个元素添加到set1,将下一个元素添加到set2。
  2. 使用布尔开关,当开关为真时,将元素添加到设置1,在4个元素之后将开关设置为false,当开关为false时,添加元素到set2当你移动时翻转开关的值完成了向set2添加元素。