如果值尚未包含在会话数组中,该如何添加新项?的PHP

时间:2019-02-13 12:07:49

标签: php arrays session

我正在尝试将尚不存在的新项目添加到我的数组中,但是下面的代码显示了一个错误:

// 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 :(得分:1)

您可以使用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
  }
} 

答案 1 :(得分:1)

首先,不要盲目地将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;
}