我有一个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。
医学points 1= 50
医学points 2= 20
因此,它应该是50(医药1分)乘以1(药量1)和20x1(药物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);
}我在这里错过了什么?
发布于 2019-01-23 07:43:53
您可以将dd()看作一个转储和死亡。这将转储询问的数据并杀死脚本。因为这是执行的,所以脚本在完成循环之前就被终止了。
您需要在foreach-循环之后使用dd() 。
$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函数。
发布于 2019-01-23 07:45:00
我发现您在foreach循环中执行Debug (dd),所以它将在第一次迭代之后停止。
您应该在foreach循环之外执行dd。
发布于 2019-01-23 18:18:14
为了合理化和避免多个DB调用,yu可以做下一个
$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']值都是唯一的。
https://stackoverflow.com/questions/54322180
复制相似问题