Предположим, у меня есть эта специфическая переменная сеанса, $_SESSION['cart_'.$itemid]
.
Можно ли отсортировать всю переменную сеанса и найти один раз с индексом 'cart_'.$itemid
и 'cart_'.$itemid
их?
$matches = preg_grep('/^cart_/', array_keys($_SESSION)); foreach ($matches as $match) { unset($_SESSION[$match]); }
с$matches = preg_grep('/^cart_/', array_keys($_SESSION)); foreach ($matches as $match) { unset($_SESSION[$match]); }
Конечно. Вы могли бы сделать что-то вроде
foreach ($_SESSION as $key=>$val) { // Look for "cart_" at the front of the array key if (strpos($key, "cart_") === 0) { unset($_SESSION[$key]); } }
сforeach ($_SESSION as $key=>$val) { // Look for "cart_" at the front of the array key if (strpos($key, "cart_") === 0) { unset($_SESSION[$key]); } }
Или то же самое, используя array_keys()
:
foreach (array_keys($_SESSION) as $key) { // Look for "cart_" at the front of the array key if (strpos($key, "cart_") === 0) { unset($_SESSION[$key]); } }
сforeach (array_keys($_SESSION) as $key) { // Look for "cart_" at the front of the array key if (strpos($key, "cart_") === 0) { unset($_SESSION[$key]); } }
добавление
Однако, если я могу сделать дизайнерское предложение, если у вас есть возможность изменить эту структуру, я бы вместо этого рекомендовал хранить эти элементы корзины в виде массива. Затем массив сохраняет значения идентификаторов элементов внутри.
// Updated after comments.... $_SESSION['cart'] = array(); // Add to cart like this: $_SESSION['cart'][$itemId] = $new_quantity;
Это упростит работу:
foreach ($_SESSION['cart'] as $item=>$quantity) { // process the cart }
В $ SESSION ['cart ' будет храниться только один элемент. $ itemId], если вы не меняете содержимое $ itemId.
В любом случае, вы можете отменить это:
if (isset($_SESSION['cart_' . $itemId])) { // don't need this if you are iterating through $_SESSION unset($_SESSION['cart_' . $itemId]); }