php - 在数组中推进索引键

标签 php arrays foreach

我有一个数组,其中的数字递增键从 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

等等等等......

当您查看两个数组键之间的关系时,您会看到以下内容:

  • 旧数组键 012 保留其键值

  • 旧的数组键369等,如果乘以2,给你新的数组键值

  • 旧数组键 4710 等,如果乘以 2 和从总数中减去 1,您将获得该特定键的新数组键

  • 旧数组键 5811 等,如果乘以 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/

相关文章:

php - 如果我在该图像中写入另一个变量,则图像标记在 php html 中不起作用。请找到下面所附的代码

php - 使用检测移动浏览器脚本进行平板电脑检测?

java - java中的数组初始化

PHP 计算平衡数组

php - 如何找到foreach索引?

php - 我可以在 html 页面中显示 <?PHP ?>, <SCRIPT> 标签吗

php - 将数组键和值传递给 Mysql 查询字符串

java - MyBatis - 在嵌套的 foreach 循环中迭代列表,它是 HashMap 的值

c# - 使用 foreach 遍历通用列表并将值添加到列表<DTO>

php - 为什么在 Eloquent 模型中调用方法时得到 'Non-static method should not be called statically'?