Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Как удалить запись массива из сессии - PHP

#php #массивы #сессия


есть вот такой массив в котором лежит 3 товара и передается через $_SESSION['shopping_cart'][]:

    array(3) {
  [0]=>
  array(3) {
    ["variant_id"]=>
    int(154)
    ["amount"]=>
    int(1)
    ["lvl"]=>
    int(1)
  }
  [1]=>
  array(3) {
    ["variant_id"]=>
    int(157)
    ["amount"]=>
    int(1)
    ["lvl"]=>
    int(6)
  }
  [2]=>
  array(3) {
    ["variant_id"]=>
    int(167)
    ["amount"]=>
    int(1)
    ["lvl"]=>
    int(0)
  }
}


Как мне удалить товар с variant_id = 157, то-есть весь массив [1], но я знаю только
variant_id. Буду благодарен за вашу помощь!
    


Ответы

Ответ 1



Как вариант можно через цикл: $arr = [ ['variant_id' => 154, 'amount' => 1, 'lvl' => 1], ['variant_id' => 157, 'amount' => 1, 'lvl' => 6], ['variant_id' => 167, 'amount' => 1, 'lvl' => 0] ]; foreach($arr as $key => $value) { if ($value['variant_id'] == 157) unset($arr[$key]); } print_r($arr); Второй вариант с помощью функции array_filter: $id = 157; $arr = array_filter($arr, function ($x) use ($id) { return $x['variant_id'] !== $id; }); print_r($arr);

Ответ 2



Вы можете использовать, к примеру, функцию array_filter и включить туда более сложную логику, если понадобится. Ну смотрите. $resultArray = array_filter($sessionArray, function ($value) use ($toDelete) { return $value['variant_id'] !== $toDelete }); Объяснение: $sessionArray ваши исходные данные, а $toDelete значение, которое нужно отбросить. Соответственно, вы можете оформить анонимную функцию отдельно и использовать многократно передавая то, что вам нужно удалить, а если быть точнее, то в данном контексте вы фильтруете свой ассоциативный массив, оставляя что вам нужно. Вы можете передать в use, например, еще одно значение, которое будет являться ключом, который вам нужно будет отфильтровать и тогда сможете этой функцией, передавая ей соответствующие значения, добиваться фильтрации любых полей по заданным значениям.

Ответ 3



Можно через поиск: $arr = [ ['variant_id' => 154, 'amount' => 1, 'lvl' => 1], ['variant_id' => 157, 'amount' => 1, 'lvl' => 6], ['variant_id' => 167, 'amount' => 1, 'lvl' => 0] ]; $id = 157; if(($key = array_search($id,array_column($arr, 'variant_id'))) !== FALSE){ unset($arr[$key]); } Будет быстрее, чем filter

Комментариев нет:

Отправить комментарий