我有一个数组,带有数字递增的键,从0
开始,像0 1 2 3 4 5....等等
。我需要按照以下方式为数组分配新的键:
前三个键保持其索引号
每第四个键增加
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
第三组
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
第四组为
9
以此类推.....
可能的解决方案
我所能想到的唯一解决方案是在我的 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;
我的问题
这个问题是否有更聪明、更数学化的解决方法呢?