我有这个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);
}
我在这里想念什么?
答案 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
函数。
答案 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']
的值都是唯一的。