2017-01-11 3 views
0

У меня есть кнопка рядом со всеми моими «предметами магазина», которые могут удалить один из предметов магазина, однако мне нужно его просто удалить, а не удалить весь массив числа, я думал, что это возможно, используя оператор break, когда я нашел номер, который хочу удалить, но он удаляет все числа.Удаление определенного номера из массива сеансов в PHP

  if (isset($_GET['remove']) && isset($_SESSION['shopitems'])) { 
      if (in_array($_GET['remove'], $_SESSION['shopitems'])) { 
       for ($i = 0; $i < sizeof($_SESSION['shopitems']); $i++) { 
        if ($_SESSION['shopitems'][$i] == $_GET['remove']) { 
         $shopArray = $_SESSION['shopitems']; 
         if(sizeof($shopArray) == 1) { 
          $_SESSION['shopitems'] = null; 
          $_SESSION['added'] = null; 
         } else { 
          array_splice($shopArray, $i, $i); 
          $_SESSION['shopitems'] = $shopArray; 
         } 
         break; 
        } 
       } 
      } 
     } 

Здесь я проверить, если URL содержит переменную удалить, и сеанс устанавливается после того, как я сделал это, я проверить, если массив содержит число, которое ставится в URL, если это так я начну цикл for и проверить, равен ли ключевой индекс элементов сеансового магазина переменной URL, поэтому я хочу удалить его, однако, если я использую array_splice, внезапно все они исчезнут, это из-за функции, которую я использую ? Или нарушение не выполняется правильно?

+0

'$ _SESSION [ 'shopitems'] = null' очистит все shopitems массив. Вам нужно очистить желаемый элемент только что-то вроде этого '$ _SESSION ['shopitems'] [$ i] = null' – developer

ответ

1

Почему бы вам не попробовать array_search() и unset()? Это проще, взглянуть на приведенный ниже код и адаптировать его к вашей ситуации:

$array = [1, 5, 6, 12]; 
$wantToRemove = 5; 

$key = array_search($wantToRemove, $array); 
unset($array[$key]); 

var_dump($array); 
+0

Спасибо за ваш ответ, я не думал об использовании функции array_search, я недавно начал использовать PHP так это все еще что-то новое для меня! – ThatsAudio

+0

Живи и учись :) Вот почему мы все здесь – motanelu

0

Вы можете форматировать ваш $_SESSION['shopitems'] так:

$_SESSION['shopitems'] = array (
    "item_id" => "item_info", 
    "item2_id" => "item2_info", 
    ... 
) 

и сделать unset($_SESSION['shopitems'][$_GET['remove']]).

Ваш код может быть:

if (isset($_GET['remove']) && isset($_SESSION['shopitems'])) 
    if (isset($_SESSION['shopitems'][$_GET['remove']])) 
     unset($_SESSION['shopitems'][$_GET['remove']])