【问题标题】:Laravel - calculate total amount according to json array [closed]Laravel - 根据json数组计算总量[关闭]
【发布时间】:2022-01-01 21:55:27
【问题描述】:

我有以下类型的动态 JSON 数组,现在我想创建一个基于通道的数量,比如一个静态值,它依赖于来自和到该字段的 JSON,

现在,

如果通道在 1 到 399 之间,则首先是 399 X 2

如果通道在 1 到 999 之间,则首先是 (999-399) => (399 X 2) + (600 X 1.5)

如果通道大于 1000,则首先 ((1000-399) X 2) + ((1000-(999-399)) X 1.5) + 1(pending) X 1

[{
    "id": 1,
    "name": "tier1",
    "from": 1,
    "to": 399,
    "amount": 2,
    "channel_type": 1,
    "status": 1
}, {
    "id": 2,
    "name": "tier2",
    "from": 400,
    "to": 999,
    "amount": 1.5,
    "channel_type": 1,
    "status": 1
}, {
    "id": 3,
    "name": "tier3",
    "from": 0,
    "to": 1000,
    "amount": 1,
    "channel_type": 1,
    "status": 1
}]

我想做这个动态计算,以后还要加一个对象或者去掉一个对象,根据那个数组来统计数量。

请建议我这个问题的最小解决方案,因为我是通过硬代码处理的,请为我提供一个简单而干净的解决方案。

对不起,我的解释和英语很差。提前感谢您的宝贵时间。

【问题讨论】:

  • 在该数组中,哪个字段定义该通道为 300?是从/到等吗?
  • 我假设它的含义是 300,它在 1 到 399 之间等等。正如你的计算所暗示的那样。
  • 但是从1到399,这个应该有什么通道?
  • 对于1到399的第一个对象数组,如果大于399则先按399计算再大于399
  • 但是我就是不明白你的问题。

标签: php laravel laravel-5


【解决方案1】:

这个函数做你想做的事。只需将您的 json 作为数组和您的当前频道传递:

function getAmount(array $channels, int $currentChannel)
{
    $amount = 0;
    $previousChannel = null;
    $finalAmount = 0;
    foreach ($channels as $channel) {
        $amount = 0;
        if($channel['to'] > $currentChannel)
            $amount += $currentChannel;
        else
            $amount += $channel['to'];
        if($previousChannel != null) {
            $amount -= $previousChannel['to'];
        }
        $amount *= $channel['amount'];
        $finalAmount += $amount;
        $previousChannel = $channel;
        if($channel['to'] > $currentChannel)
            break;
    }
    return $finalAmount;
}

【讨论】:

  • 如果我有频道 - 400 那么答案是 200.5 实际上答案是 (399 * 2) + ((400-1)*1.5) - 799.5
  • 你已经编辑了你的数组
  • 我已将代码编辑为适合编辑后的数组。再试一次。
  • 好的,这个适用于第二排,但现在如果 1000 或大于 1000 通道,则 (399 * 2 = 798) + (599 * 1.5 = 898.5) + (2 * 1 = 2) 在这里599 来自 (999-400=599)
  • 如果通道大于 1000,您的解决方案将不起作用
猜你喜欢
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多