我想填充数组中的键,但键会增加,当满足一定数量时,它会停止并再次重复第一个增量。
我会给出代码,所以它会更容易理解。
$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?
我的代码是否有一些错误?
答案 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
。所以把它推到三元组和三元组对于像这样的情况,你有一个很好的逻辑线。