PHP递归地将函数应用于一些数组成员,从给定的索引开始,遍历数组成员直到给定的值

PHP递归地将函数应用于一些数组成员,从给定的索引开始,遍历数组成员直到给定的值,php,arrays,recursion,Php,Arrays,Recursion,在PHP版本5.6.33上工作时,我需要迭代给定数组的每个成员,但有以下限制: 1) 需要从定义的索引开始迭代,而不是从0索引或数组的第一个成员开始 2) 需要迭代给定的次数,但不是遍历整个数组,而是遍历数组成员,直到达到给定的次数 以下是一个例子: $arr = array(0,0,0,0,0,0); $repetitions = 10; $startingIndex = 3; function add($value, 1) { return $value + 1; } 遍历每个数组成

在PHP版本5.6.33上工作时,我需要迭代给定数组的每个成员,但有以下限制:

1) 需要从定义的索引开始迭代,而不是从0索引或数组的第一个成员开始

2) 需要迭代给定的次数,但不是遍历整个数组,而是遍历数组成员,直到达到给定的次数

以下是一个例子:

$arr = array(0,0,0,0,0,0);
$repetitions = 10;
$startingIndex = 3;
function add($value, 1) {
   return $value + 1;
}
遍历每个数组成员,从索引3开始,10次,向每个数组成员添加1:

0 => 0
1 => 0
2 => 0
3 => 0 + 1
4 => 0 + 1
5 => 0 + 1
6 => 0 + 1
在这里我走了4次,剩下6次:

0 => 0 + 1
1 => 0 + 1
2 => 0 + 1
3 => 0 + 1 + 1
4 => 0 + 1 + 1
5 => 0 + 1 + 1
6 => 0 + 1
因此,最终结果是:

0 => 1
1 => 1
2 => 1
3 => 2
4 => 2
5 => 2
6 => 1

显然,我已经完成了我的工作并尝试了数组映射数组行走foreach列表每个(已弃用),但在阅读PHP手册时,我发现这些函数旨在影响“每个”数组成员。相反,我需要影响一些数组成员。

要循环遍历从特定偏移量开始的数组,您需要一个重置索引的循环:

function increment(& $arr, $idx, $times) {
    for ($i = 0, $p = $idx; $i < $times; ++$i) {
        $arr[$p++] += 1;

        if ($p == count($arr)) {
            $p = 0;
        }
    }
}

$arr = array(0,0,0,0,0,0);
increment($arr, 3, 10);
var_dump($arr);
函数增量(&$arr,$idx,$times){
对于($i=0,$p=$idx;$i<$times;++$i){
$arr[$p++]+=1;
如果($p==计数($arr)){
$p=0;
}
}
}
$arr=数组(0,0,0,0,0);
增量($arr,3,10);
var_转储($arr);
试试这个:

function add($array,$start,$elements,$add) {
    for($i = $start; $i < $start + $elements; $i++) {
        $array[$i] += $add;
    }

    return $array ;
}
函数添加($array,$start,$elements,$add){
对于($i=$start;$i<$start+$elements;$i++){
$array[$i]+=$add;
}
返回$array;
}

首先拆分阵列听起来像是一个带有特定起始点和停止点的
for
循环。我想你可能想过度设计这个我们能依靠数组键吗?即。$arr是否总是与array_值($arr)相同。您的标题很吓人,告诉我您可能应该以不同的方式处理此问题。我会建议你的方法,但你的例子是毫无意义的,因为它没有逻辑对你正在做什么或为什么。我可能错了,但从表面上看,这有点异味。真正的数据是什么?你这样做的原因是什么?