Изменение значения многомерного массива в сеансе Laravel

#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] =