使用 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 )
示例数组的预期结果为 -
- 用户 A = 11
- 用户 B = 5
谢谢!
例如,您可以使用 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。
我有一个数组,它是用户操作的集合。我想切出每个用户和他们的操作总量..
数组有 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 )
示例数组的预期结果为 -
- 用户 A = 11
- 用户 B = 5
谢谢!
例如,您可以使用 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。