#php #laravel #session #multidimensional-array
#php #laravel #сеанс #многомерный массив
Вопрос:
У меня есть корзина покупок, и я хочу обновить ее количество в сеансе корзины.
Это мой сеанс корзины:
array:1 [▼
1 => array:6 [▼
"name" => "Carocroc Lam"
"image" => "carocroc_lam_15kg.jpg"
"price" => 45.95
"unit" => 15
"name_unit" => "kg"
"amount" => "2"
]
]
Итак, я знаю, что мне нужен foreach для обновления товара в корзине покупок, но когда я делаю это и отправляю его обратно в запрос, он вводит только количество товара.
Что я хочу получить, так это то, что будет обновлена только сумма, и весь обновленный массив будет отправлен обратно в корзину покупок.
Я надеюсь, что кто-нибудь сможет мне помочь.
Ответ №1:
Итак, допустим, вы сохраняете массив cart как $cartItems
, вы можете сделать:
foreach ($cartItems as $cartItem) {
$cartItem['amount'] = NEWAMOUNTVALUE;
}
Если вам нужна дополнительная помощь, пожалуйста, уточните в комментариях!
Комментарии:
1. найдено решение, смотрите мой комментарий
Ответ №2:
$cartItems = new Collection();
foreach ($items as $item) {
$cartItem = new CartItem();
$cartItem->amount = $item['amount'];
$cartItem->save();
$cartItems.push($cartItem);
}
return $cartItems;
Если вы хотите сохранить его в коллекции и вернуть должным образом, вы можете использовать этот код. Если вы хотите отредактировать массив напрямую, а затем выполнить обновление, вы можете использовать приведенный выше код из @party-ring с небольшой дополнительной информацией ниже.
foreach ($cartItems as amp;$cartItem) {
$cartItem['amount'] = NEWAMOUNTVALUE;
CartItem::update($cartItem);
}
return $cartItems;
Комментарии:
1. найдено решение, смотрите мой комментарий
Ответ №3:
Я нашел решение самостоятельно, я сделал следующее, и это сработало.
foreach ($currentCart as $item){
$currentCart[1] = [
'name' => $item['name'],
'image' => $item['image'],
'price' => $item['price'],
'unit' => $item['unit'],
'name_unit' => $item['name_unit'],
'amount' => $item['amount'] = $request->input('amount'),
];
$request->session()->put('cart', $currentCart);
}
Комментарии:
1. Не могли бы вы использовать
$item
вместо$currentCart[1]
? Потому что цикл foreach проходит через каждый элемент$currentCart
?2. Что party-ring пытается сказать, так это то, что вы нацеливаетесь на первый элемент (вероятно, второй, поскольку PHP начинает нумерацию массивов с 0 и далее), поэтому вместо динамического таргетирования вы изменяете значение только одного элемента в массиве. Поэтому используйте $item напрямую, как в наших примерах, или перепишите свой цикл foreach, чтобы включить индекс, для элемента которого вы в данный момент выполняете цикл. foreach ($currentCart как $index => $item) Затем вы можете получить к нему доступ с помощью $currentCart[$index] =