数组(php)中值的智能减法

PHP语言

难于将函数写入数组?中的每个[Amount]值中的减法值,直到将减法值确定为?为止。

示例我需要什么(减去之前):

[MainStockAddedArr] => Array
                        (
                            [0] => Array
                                (
                                    [Amount] => 10
                                    [Price] => 19.44
                                )

                            [1] => Array
                                (
                                    [Amount] => 15
                                    [Price] => 15.55
                                )

                            [2] => Array
                                (
                                    [Amount] => 20
                                    [Price] => 11.55
                                )

                            [3] => Array
                                (
                                    [Amount] => 30
                                    [Price] => 11.10
                                )

                        )

相减的值例如是30个。所以我需要数组中的结果看起来像这样:

    [MainStockAddedArr] => Array
                        (
                            [0] => Array
                                (
                                    [Amount] => 0
                                    [Price] => 19.44
                                )

                            [1] => Array
                                (
                                    [Amount] => 0
                                    [Price] => 15.55
                                )

                            [2] => Array
                                (
                                    [Amount] => 15
                                    [Price] => 11.55
                                )

                            [3] => Array
                                (
                                    [Amount] => 30
                                    [Price] => 11.10
                                )

                        )

在上面的示例中,将两个值更改为0,以使已取25件,在第三个值中仅取5,即取30件,因此不再需要。这只是示例,减法值将是动态的,而该循环高于该值。

在相减值大于整个数组(总和[Amounts])的情况下,则需要否则。

aili34471 回答:数组(php)中值的智能减法

这是FIFO(先进先出)方法的示例..您可以尝试,如果需要的话可以进行一些校正。

作为常规功能:

function fifo($argArray,$argValue,$colName = 'amount') {

    // initialize
    $total = is_numeric($argValue) ? $argValue : 0;
    $i = 0;

    // check for input amount (total)
    if ($total > 0) {

        // process the input array 
        foreach ($arrArray as $key => $v) {

            // initialize amount value
            $amount = $remains = $v[$colName] ?: 0;

            // check for amount availability
            if ($amount) {
                // increment counter
                $i++;

                // calculate amount value remains
                $remains -= $amount > $total ? $total : $amount;

                // set amount value remains in array
                $argArray[$key][$colName] = $remains;

                // calculate last total remains
                $total -= $amount - $remains;

                // when total remains is zero then exit the loop process
                if ($total === 0) break;
            }
        }
    }

    // return count of rows been used and total remains
    return ['rowsCount' => $i,'totalRemains' => $total];
}

用法:

$result = fifo(<argArray>,<argValue>,[<columnName>]);

作为班级:

namespace AnyNamespace;

class AnyClass extend \ArrayObject {

public function getFifo($argValue,$colName = 'amount') {
    return $this::fifo($this,$colName);
}

public static function fifo($argArray,'totalRemains' => $total];
}
}

用法:

use AnyNamespace;
...
$result = AnyClass::fifo(<argArray>,[<columnName>]);

use AnyNamespace;
...
$anyClass = new AnyClass(<inputArray>);

$result = $anyClass->getFifo(<argValue>,[<columnName>]);
本文链接:https://www.f2er.com/2847421.html

大家都在问