首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉勒维尔:前额之和

拉勒维尔:前额之和
EN

Stack Overflow用户
提问于 2019-01-23 07:39:59
回答 3查看 2.2K关注 0票数 0

我有一个foreach循环:

我的$items看起来是这样的:

代码语言:javascript
复制
array:2 [▼
  0 => array:3 [▼
    "variant_id" => "393c6c70-8cb7-11e8-815a-f9c70a1fbe8e"
    "name" => "Medicine 1"
    "quantity" => "1"
  ]
  1 => array:3 [▼
    "variant_id" => "8a80d340-e0c1-11e8-86a4-3b06d2b50e37"
    "name" => "Medicine 2"
    "quantity" => "1"
  ]
]

现在,在我的foreach中,我将variant_id与我的数据库进行比较,并从数据库中获取points,并将其乘以药物的quantity

医学points 1= 50

医学points 2= 20

因此,它应该是50(医药1分)乘以1(药量1)和20x1(药物2),然后两者之和等于70。但是当我dd($sum)的时候,我得到的是50,这只是医学1。

代码语言:javascript
复制
    $sum = 0;
    foreach ($items as $variants) {
        $id = $variants['variant_id'];
        $quantity = $variants['quantity'];
        $find = Activity::where('variant_id', $id)->first();
        $act_points = $find->points * $quantity;
        $sum += $act_points;
        dd($sum);
    }

我在这里错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-23 07:43:53

您可以将dd()看作一个转储和死亡。这将转储询问的数据并杀死脚本。因为这是执行的,所以脚本在完成循环之前就被终止了。

您需要在foreach-循环之后使用dd()

代码语言:javascript
复制
$sum = 0;
foreach ($items as $variants) {
    $id = $variants['variant_id'];
    $quantity = $variants['quantity'];
    $find = Activity::where('variant_id', $id)->first();
    $act_points = $find->points * $quantity;
    $sum += $act_points;
}
dd($sum);

如果不想停止脚本的执行,请使用dump函数。

https://laravel.com/docs/5.7/helpers#method-dd

票数 6
EN

Stack Overflow用户

发布于 2019-01-23 07:45:00

我发现您在foreach循环中执行Debug (dd),所以它将在第一次迭代之后停止。

您应该在foreach循环之外执行dd。

票数 1
EN

Stack Overflow用户

发布于 2019-01-23 18:18:14

为了合理化和避免多个DB调用,yu可以做下一个

代码语言:javascript
复制
$input = [
    [
        "variant_id" => "393c6c70-8cb7-11e8-815a-f9c70a1fbe8e",
        "name" => "Medicine 1",
        "quantity" => "1",
    ],
    [
        "variant_id" => "8a80d340-e0c1-11e8-86a4-3b06d2b50e37",
        "name" => "Medicine 2",
        "quantity" => "1",
    ],
];

$sum = Activity::whereIn('variant_id', array_column($input, 'variant_id'))->get()->sum(function ($s) use ($input) {
    foreach ($input as $k => $v) {
        if ($s->variant_id == $v['variant_id']) {
            return $s->points * $v['quantity'];
        }
    }
});

如果在$input数组中没有由variant_id重复的元素,这将有效。换句话说,如果每个$input[n]['variant_id']值都是唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54322180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档