PHP值减法

时间:2013-05-28 21:26:07

标签: php algorithm

假设我有一个带数值的数组。

$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

所以我想更新数组和减法值。

1 个答案:

答案 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

Live DEMO