推进数组中的索引键

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,12保持其键值

  • 旧的阵列键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)

我的问题

难道没有更聪明的数学方法吗?

Luk*_*uke 5

请尝试以下方法:

$new_key = floor($old_key / 3) * 3 + $old_key
Run Code Online (Sandbox Code Playgroud)