我有一个数组,其中的数字递增键从 0
开始,例如 0 1 2 3 4 5 ....etc
。我需要按以下方式为数组分配新键
前三个键保持索引号
每第 4 个键递增
4
第四个键之后的两个键再次递增
1
我知道我需要使用 foreach
循环(这似乎是最简单的方法)来使用新分配的键构建一个新数组。我的问题是 key 的计算
这是我所看到的关系
这是我当前的数组键
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
,你就得到了那个特定键的新数组键
或者,如果您从新 key 中减去旧 key ,您会得到以下答案
0
第一组3
第二组6
第三组9
第 4 组等等等等......
可能的解决方案
我能想到的唯一解决方案是使用模数运算符(在我的 foreach
循环中),根据模数结果检查当前 key ,然后计算我的新 key key
例子:
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;
我的问题
难道没有更智能、更数学化的方法吗?
最佳答案
尝试以下操作:
$new_key = floor($old_key / 3) * 3 + $old_key
关于php - 在数组中推进索引键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30729183/