假设我有一个带数值的数组。
$expenses = array(10, 10, 10, 10, 5, 5, 2, 20);
在循环内改变的数值。假设此值称为$ sub,并初始化为30。
我想要的是在下面的嵌套循环中,从$ sub中减去每个值数组的值。
例如:
for($i = 0; $i < 50; $i++){
//$sub = a whatever value;
for($j = 0; $j < count($expenses); $j++){
if ( $expenses[$j] > 0 ){
//the area for calculations to run
$expenses[$j] = $sub - $expenses[$j];
}
}
}
结果是:
Index 0: $expenses[0] = $sub - $expenses[0]; // 30-10=20
Index 1: $expenses[1] = $sub - $expenses[1]; // 30-10=20
...
当嵌套循环找到与前一个不同的当前数组值时
(即$ expenses数组中的索引4和索引3),然后$ sub必须具有循环中最后发生的减法的值,即20.如果这是真的,则主要的缩写必须是20- 5。
虽然当前数组值与之前的数组值相同,但继续执行20-5操作。所以交易是要记住减法的结果并调整$ sub以便用$expenses
数组值进行减法。
当减法的结果为负或为零时,则必须终止执行。
在我们的例子中,第一个循环结束执行后的最终结果是:
指数0:30-10 = 20
指数1:30-10 = 20
指数2:30-10 = 20
指数3:30-10 = 20
指数4:20-5 = 15
指数5:20-5 = 15
指数6:15-2 = 13
指数7:13-20 = -7
所以我想更新数组和减法值。
答案 0 :(得分:2)
您只需要:CachingIterator
$ci = new CachingIterator(new ArrayIterator($expenses));
foreach($ci as $k => $item) {
$diff = $sub - $item;
printf("Index %d: %d-%d = %d\n", $k, $sub, $item, $diff);
if ($item != $ci->getInnerIterator()->current()) {
$sub = $diff;
}
}
输出
Index 0: 30-10 = 20
Index 1: 30-10 = 20
Index 2: 30-10 = 20
Index 3: 30-10 = 20
Index 4: 20-5 = 15
Index 5: 20-5 = 15
Index 6: 15-2 = 13
Index 7: 13-20 = -7