Как я могу добавить новые элементы в мой массив сеанса, если значение еще не в нем?PHP - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь добавить новые элементы в мой массив, если они еще не существуют, но приведенный ниже код показывает мне ошибку:

// Check if session exists
if(!isset($_SESSION['coupon'])){
  // Create array from session
  $_SESSION['coupon']['couponcode'] = array();
}

if(!isset($_SESSION['coupon']['couponcode'][$coupon])){
  // Add couponcode to session if it does not already exist
  $_SESSION['coupon']['couponcode'][] = $coupon;
}

$_SESSION['coupon']['couponcode'][] = $coupon;

Дает: PHP Fatal error: Uncaught Error: [] operator not supported for strings

Но я подумал, что это был способ добавить в массив: если я уберу скобки, он просто заменяет значение каждый раз.

У меня есть session_start(); везде наверху моих страниц.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Прежде всего, не ставьте вслепую session_start () в верхней части каждой страницы.Он начнет сеанс снова, даже если предыдущий сеанс был запущен, и обновит все ваши значения, поэтому сначала измените его на:

if (session_status() == PHP_SESSION_NONE) {
   session_start();
}

, таким образом, он начинает сеанс, только если он не существует.

Теперь вы получаете ошибку, потому что ваш $_SESSION['coupon']['couponcode'] является строкой, поэтому добавьте дополнительную проверку:

if(!isset($_SESSION['coupon']['couponcode'][$coupon])){
  // Add couponcode to session if it does not already exist
  if (empty($_SESSION['coupon']['couponcode']) || !is_array($_SESSION['coupon']['couponcode']))) {
      $_SESSION['coupon']['couponcode'] = [];
  }
  $_SESSION['coupon']['couponcode'][] = $coupon;
}
0 голосов
/ 13 февраля 2019

Вы можете использовать array_push ():

if(empty($_SESSION['coupon'])){
   // Create array from session
   $_SESSION['coupon']['couponcode'] = array();
}
else
{
  if(!in_array( $coupon,$_SESSION['coupon']['couponcode'])) //check in array available
  {
    array_push($_SESSION['coupon']['couponcode'], $coupon); //push to array
  }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...