我有一个数组和一个整数作为输入,我想顺序从整数中扣除数组元素,减少相应的数组值,直到它们与' first-in-first-out
'原理
我将用一个例子说明我的问题:
输入:
array: [12, 16, 23]
integer: 25
预期产出:
[0, 3, 23]
↑ ↑ See here 25 got subtracted
算法:
12-25
(第一个数组元素 - 整数)结果:-13
,所以我将数组的第一个元素放到0
。整数为13。
16-13
(第二个数组元素 - 整数)得到3
,所以我将数组的第二个元素放到3
。并且整数为0。
(因为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;
}
}
}
答案 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
)