我有这个数组:
Array
(
[236] => 5.00
[39] => 5.00
[19] => 5.00
[37] => 5.00
[185] => 5.00
[235] => 3.00
)
例如:我有20.总值是28.现在我想减少数组中的值,直到减去20。
所以这可能是新阵列(它从中减去了它的值)。总值= 8(28-20)
阵列
(
[236] => 0.00
[39] => 2.00
[19] => 0.00
[37] => 0.00
[185] => 3.00
[235] => 3.00
)
怎么做?如果可能,我想要一个选项,从最高值或键号中减去第一个。
答案 0 :(得分:0)
设置总减去量,然后通过引用迭代数组。从总减去量中减去每个数组值,并将该值设置为零,直到得到一个大于剩余减去量的值。然后用剩余的减去量减少该值。
$subtract_amount = 20;
foreach ($array as &$value) {
if ($value <= $subtract_amount) {
$subtract_amount -= $value;
$value = 0;
} else {
$value -= $subtract_amount;
$subtract_amount = 0;
}
if ($amount == 0) break;
}
unset($value); // unset the reference
如果您希望它首先使用最高值/键,那么事先使用arsort
或krsort
对数组进行排序。