Laravel:总和

时间:2019-01-23 07:39:59

标签: php laravel

我有这个foreach循环:

我的$items看起来像这样:

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。< / p>

points对于药物1为= 50

points for Medicine 2 is = 20

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

    $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);
    }

我在这里想念什么?

3 个答案:

答案 0 :(得分:5)

您可以将dd()视为转储和死亡。这将转储询问的数据并杀死脚本。由于此操作已执行,因此脚本会在结束循环之前终止

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

$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

答案 1 :(得分:1)

我发现您正在foreach循环中执行Debug dump(dd),因此它将在第一次迭代后停止。

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

答案 2 :(得分:0)

要合理化并避免多个数据库调用,您可以执行下一个

$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']的值都是唯一的。