【问题标题】:Calculate the total actions from a user in a array using PHP使用 PHP 计算数组中用户的总操作
【发布时间】:2022-01-05 00:08:01
【问题描述】:

我有一个数组,它是用户操作的集合。我想切出每个用户及其操作的总数..

数组有3个值

  • 发件人
  • 价值
  • 功能

那么有3个可能的功能-

  • 存款
  • 退出
  • 移除

用户可以存钱,取出一些钱(提款)或全部删除(删除)

这里是关联数组-

$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

谢谢!

【问题讨论】:

    标签: php arrays associative-array calculation


    【解决方案1】:

    例如,您可以使用 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。

    【讨论】:

    • 非常感谢,这就是诀窍!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多