#php #laravel #laravel-7
#php #laravel #laravel-7
Вопрос:
Я пытаюсь получить общую сумму в зависимости от цены и количества, но общая сумма, которую я получаю, равна двойному. Вот что я использую:
foreach ($request->product_id as $product_id){
foreach ($request->quantity as $quantity){
$product = Product::find($product_id);
if($product->discount_price == null){
$total = $product->selling_price * $quantity;
}
else{
$total = $product->discount_price * $quantity;
}
array_push($total_price, $total);
}
}
return array_sum($total_price);
Здесь $request-> product_id и $request-> quantity представляют собой массив, который я возвращаю из интерфейса. Поскольку пользователь может выбрать несколько продуктов и их соответствующее количество
Если я удалю array_sum в инструкции return, то я увижу многократное повторение общей суммы (показано на изображении)…Не знаю, как решить эту проблему
Комментарии:
1. Извините, просто для пояснения, вы пытаетесь сложить все значения вместе?
2. Из вашего кода похоже, что для каждого продукта вы зацикливаете все количества из запроса, я думаю, вам нужно только 1 количество на продукт
3. Можете ли вы показать нам данные модели вашего запроса
4. Я бы попробовал отформатировать его так, чтобы количество добавлялось к продукту перед запуском цикла. Это ajax-форма или обычная форма? Вложенные циклы foreach вызывают проблему, потому что в каждом цикле product он перебирает все количества, отправленные в post.
5. будет ли array_combine ($request-> product_id , $request-> quantity ) выстраивать ваш массив для использования foreach с ключевым индексом?
Ответ №1:
попробуйте это
foreach ($request->product_id as $key=>$product_id){
$product = Product::find($product_id);
if($product->discount_price == null){
$total = $product->selling_price * $request->quantity[$key];
}
else{
$total = $product->discount_price * $request->quantity[$key];
}
array_push($total_price, $total);
}
return array_sum($total_price);