我有一个名为example的mysql表。
Id | Amount | Left | Filled
1 | 1 | 1 | 0
2 | 4 | 4 | 0
5 | 7 | 7 | 0
我有一个名为$var = 9
的变量
现在,我有了一个名为$array
的数组,其ID为array([0] => 1, [1] => 2, [2] => 5)
,它本身就是mysql的结果。
我该如何做一个循环,以便数组中的id继续减去左边的值,并继续按数量填充,但仍在$var
的总值之内,这样我在表中的最终结果是
Id | Amount | Left | Filled
1 | 1 | 0 | 1
2 | 4 | 0 | 4
5 | 7 | 3 | 4
答案 0 :(得分:0)
您可以使用while循环来循环id并减少每次迭代的数量。
我不确定您如何访问数据库,因此我将其保留为伪造。
考虑以下代码:
$ids = array(1,2,5);
$value = 9;
function reduceAmount($id, $value) {
$query = mysqli_query($conn, "SELECT * FROM example WHERE Id='$id'");
$row = mysqli_fetch_array($query);
$take = min($row['Left'], $value); // the amount you can take (not more then what left)
$left = $row['Left'] - $take;
$filled = $row['Filled'] + $take;
$conn->query("UPDATE example SET Left='$left', Filled='$filled' WHERE Id='$id'")
return max(0, $value - $take);
}
while ($value > 0 && !empty($ids)) { // check if value still high and the options ids not finish
$id = array_shift($ids); //get first ID
$value = reduceAmount($id, $value);
}
您可以在循环结束时检查value
是否仍大于0-如果ids
中的“金额”不足,就会发生这种情况