#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
Комментариев нет:
Отправить комментарий