Pie*_*sen 4 php arrays foreach
我有起始于数值递增键的阵列0,等0 1 2 3 4 5 ....etc.我需要以下列方式为数组分配新密钥
前三个键保留其索引号
每4个键增加 4
第四个之后的两个键1再次递增
我知道我需要使用foreach循环(似乎是最简单的方法)来构建具有新分配键的新数组.我的问题是计算密钥
这是我当前的数组键
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
这就是我需要它们
0 1 2 6 7 8 12 13 14 18 19 20 24 25 26 30
让我们将其分解为3个关键组,顶部是旧的数组键,底部是新的数组键
第一组
0 1 2
0 1 2
第二组
3 4 5
6 7 8
第3组
6 7 8
12 13 14
第四组
9 10 11
18 19 20
等等......
当您查看两个数组键之间的关系时,您将看到以下内容:
旧的数组键0,1并2保持其键值
旧的阵列键3,6,9等,如果乘2,为您提供了新的数组键值
旧的阵列键4,7,10等,如果再乘以2你减去1从总的,你得到的是具体的关键新数组键
旧的阵列键5,8,11等,如果再乘以2你减去2从总的,你得到的是具体的关键新数组键
或者,如果从新密钥中减去旧密钥,则会得到以下答案
0 为第一组
3 为第二组
6 为第3组
9 为第4组
等等......
我能想到的唯一解决方案是使用模数运算符(在我的foreach循环内),根据模数结果检查当前键,然后计算我的新键
例:
if ( $key%3 == 0 && $key != 0 ) {
$new_key = $key * 2;
} elseif ( ( $key - 1 ) %3 == 0 && $key != 1 ) {
$new_key = ( $key * 2 ) - 1;
} elseif ( ( $key - 2 ) %3 == 0 && $key != 2 ) {
$new_key = ( $key * 2 ) - 2;
} else {
$new_key = $key;
}
$new_array[$new_key] = $value;
Run Code Online (Sandbox Code Playgroud)
难道没有更聪明的数学方法吗?