如何从数组元素中减去整数

时间:2015-08-13 17:12:47

标签: php arrays

我有一个数组和一个整数作为输入,我想顺序从整数中扣除数组元素,减少相应的数组值,直到它们与' first-in-first-out'原理

我将用一个例子说明我的问题:

输入:

array: [12, 16, 23]
integer: 25

预期产出:

[0, 3, 23]
 ↑  ↑ See here 25 got subtracted

算法:

  1. 12-25(第一个数组元素 - 整数)结果:-13,所以我将数组的第一个元素放到0。整数为13。

  2. 16-13(第二个数组元素 - 整数)得到3,所以我将数组的第二个元素放到3。并且整数为0。

  3. (因为12+16 = 28 > 25第三个数组元素保持不变)

    在PHP中执行此任务的最佳策略是什么?

    修改

    我目前的代码/尝试:

    public function updateStock(Product $product, $quantity)
    {
        $j = true;
        // $quantity is an integer passed as method parameter 
        while ($j) {
            // $stock is an array of objects, each has a quantity property which must be reducted.
            // getActualStocks() method returns stocks with $stock->quantity above zero
            $stock = $product->getActualStocks()[0];
            $initialQuantity = $stock->quantity;
            // this is supposed to update $stock->quantity property 
            $stock = $stock->update($quantity)
            if ($stock->quantity < 0) {
                $quantity = $quantity - $initialQuantity;
                $stock->quantity = 0;
                $stock->save();
            } else {
                $j = false;
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

这应该适合你:

使用for循环遍历数组并检查每次迭代,如果你不在数组的末尾并且$input仍然大于0。

在每次迭代中,您只需从$newInput中减去当前数组元素($arr[$i])即可计算$input。如果结果大于0,则将结果分配给$newInput,否则分配0,在下一次迭代中循环将停止。

然后你用循环中的当前元素做同样的事情。因此,如果结果为负,则只需指定0。

在每次迭代结束时,只需将$newInput分配给$input

<?php

    $arr = [12, 16, 23];
    $input = 25;
    $length = count($arr);

    for($i = 0; $i < $length && $input > 0; $i++) {
        $newInput = $input - $arr[$i] > 0 ? $input - $arr[$i] : 0;
        $arr[$i] = $arr[$i] - $input >= 0 ? $arr[$i] - $input : 0;
        $input = $newInput;
    }

    print_r($arr);

?>

输出:

Array
(
    [0] => 0
    [1] => 3
    [2] => 23
)