使用 PHP 计算数组中用户的总操作

Calculate the total actions from a user in a array using PHP

我有一个数组,它是用户操作的集合。我想切出每个用户和他们的操作总量..

数组有 3 个值

那么可能有3个函数-

用户可以存钱、取钱(Withdraw)或全部移除(Remove)

这里是关联数组-

$resultArray[] = array(
    'sender' => $sender,
    'value' => $value,
    'function' => $func,
);

我想做的是为数组中的每个用户计算按顺序输入、提取或移除了多少钱。因此,如果用户 A 输入 10 美元,然后取出 5 美元,然后输入 2 美元,则用户 A 的总金额为 7 美元。

我正在努力寻找正确的逻辑和方法来完成这个。任何人都知道我如何才能为每个用户实现预期的结果?

这是一个示例数组

Array ( [0] => Array ( [sender] => userA [value] => 10 [function] => deposit ) [1] => Array ( [sender] => userB [value] => 5 [function] => deposit ) [2] => Array ( [sender] => userA [value] => 2 [function] => withdraw )[3] => Array ( [sender] => userA [value] => 3 [function] => deposit )   

示例数组的预期结果为 -

谢谢!

例如,您可以使用 array_reduce(或使用相同方法的 foreach 循环),对于 $result 数组,将发件人作为数组键。

假设只有正数,如果还没有发件人并且有存款,则将该值设置为起始值。如果有取款,则取反该值。

如果已经有发送者,则根据充值或提现的价值进行加减。

$result = array_reduce($arrays, function ($acc, $curr) {
    if (array_key_exists($curr["sender"], $acc)) {
        if ($curr["function"] === "deposit") {
            $acc[$curr["sender"]] += $curr["value"];    
        }
        if ($curr["function"] === "withdraw") {
            $acc[$curr["sender"]] -= $curr["value"];
        }
    } else {
        if ($curr["function"] === "deposit") {
            $acc[$curr["sender"]] = $curr["value"];
        }
        if ($curr["function"] === "withdraw") {
            $acc[$curr["sender"]] = -1 * $curr["value"];
        }
    }
    return $acc;
}, []);

输出

Array
(
    [userA] => 11
    [userB] => 5
)

看到一个PHP demo