【问题标题】:php decrease values in arrayphp减少数组中的值
【发布时间】:2018-02-16 06:23:18
【问题描述】:

我有这个数组:

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
)

如何做到这一点?如果可能的话,我想要一个选项先从最大值或键号中减去。

【问题讨论】:

  • 以相反的值顺序排序数组 => 测试总和 重置第一项 => 重复并重复
  • 最后一个示例数组的逻辑是什么?为什么它的第二个值是两个而不是最后一个?或者为什么最后一个值不是 3 和 5 或 4 和 4 而不是 2,3,3?
  • 这感觉很像家庭作业,哈哈。查看array_sumcount
  • SO 不是免费的代码编写服务...请参阅stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve
  • 1/. 如果 X 是你需要减去的值,检查 Array sum 是否 >= to X. 2/. 排序你的数组按 [number] desc。 3/. 对于每个 CellValue:a)。如果 CellValue 4/. 如果 X=0 离开 foreach。 5/. edit 如果您有问题,您对简单算法的实现有疑问。

标签: php arrays


【解决方案1】:

设置您的总减量,然后通过引用迭代您的数组。从总减量中减去每个数组值,并将该值设置为零,直到获得大于剩余减量的值。然后将该值减去剩余的减去量。

$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

如果您希望它首先处理最高值/键,请事先使用 arsortkrsort 对数组进行相应的排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2012-02-25
    • 2020-03-29
    相关资源
    最近更新 更多