在foreach PHP中增加数量

时间:2014-06-02 15:00:28

标签: php foreach numbers increment

我想填充数组中的键,但键会增加,当满足一定数量时,它会停止并再次重复第一个增量。

我会给出代码,所以它会更容易理解。

$start = 0004;
$end = 0150;
$trans = array();
for ($c = $start; $c <= $end; $c++) {
    $strpad = str_pad($c, 4, "000", STR_PAD_LEFT);
    $trans[] = $strpad;
}

$numtable = 1062;
$newarray = array();  
foreach($trans as $value) {
    $newarray[$numtable] = $value;
    $numtable++;
}
var_dump($newarray);
// output
array(147) {
  [1062]=>
  string(4) "0004"
  [1063]=>
  string(4) "0005"
  [1064]=>
  string(4) "0006"
  [1065]=>
  string(4) "0007"
  [1066]=>
  string(4) "0008"
and so on....
// end output

现在,我想要的是,当增量数达到1100时,它将重置为1000并继续递增,当它再次达到1100时,它将重置为1000并再次继续。

所以,我试图做的是:

$numtable = 1062;
$newarray = array();  
foreach($trans as $value) {
    if($numtable==1101){
        $numtable = 1000;
    }
    $newarray[$numtable] = $value;
    $numtable++;
}
var_dump($newarray);
// output


  array(101) {
  [1062]=>
  string(4) "0105"
  [1063]=>
  string(4) "0106"
  [1064]=>
  string(4) "0107"
  [1065]=>
  string(4) "0108"
and so on.. continue to...
  string(4) "0148"
  [1005]=>
  string(4) "0149"
  [1006]=>
  string(4) "0150"
  [1007]=>
  string(4) "0050"
  [1008]=>
  string(4) "0051"
And so on...

我的问题是: 我非常确定我的第二代码代码是正确的。 但是,为什么数组值从0105开始而不是0004? 当值达到0150时,它仍然继续循环开始到0050?

我的代码是否有一些错误?

1 个答案:

答案 0 :(得分:0)

要计算此类问题,请使用modulus operator

$numtable = 1062;
$numtable_min = 1000;
$numtable_max = 1101;
$newarray = array();  
foreach($trans as $value) {
    $numtable = $numtable % $numtable_max == 0 ? $numtable_min : $numtable;
    $newarray[$numtable] = $value;
    $numtable++;
}

所有的魔力都在这里:

$numtable = $numtable % $numtable_max == 0 ? $numtable_min : $numtable;

理解它的另一种方法是用这样的实数值替换变量:

$numtable = 1062 % 1101 == 0 ? 1000 : 1062;

所以三元线读取的方式是这样的;根据以下内容指定$numtable值:

  • 1062 % 1101 == 0如果0的增量值达到1062,则只会1101
  • 如果发生这种情况,请将该值设置为1000
  • 如果没有,请将该值设置为1062

理解模数运算符神奇的简单方法是将%视为计算%左边数字的剩余部分到右边的数字。

因此1062除以1101的余数为0.96457765667。但是1101除以1101没有余数;又名:0。所以把它推到三元组和三元组对于像这样的情况,你有一个很好的逻辑线。