【问题标题】:PHP in_array and array_key_exists not working for SESSIONPHP in_array 和 array_key_exists 不适用于 SESSION
【发布时间】:2016-05-19 02:10:37
【问题描述】:
<?php   
session_start();
 if(!empty($_SESSION["cart_item"])) {

            if(in_array($_GET['code'],$_SESSION["cart_item"])){
                echo "hiiii";
            }else{
                echo "byeee";}
        }else {
            $itemArray = array($_GET['code']=>array('pcode'=>$_GET['code']));
            $_SESSION["cart_item"] = $itemArray;
        }
?>

我正在尝试使用 in_array 检查 $_SESSION[cart_item] 中是否有类似的项目存储,但它只返回 false,尽管我确保该值确实存储在 $_SESSION 中。

当我进行一些检查时,由于我的 $_SESSION 有一个多维数组,我应该使用 array_key_exists,这是我的代码

if(array_key_exists($_GET['code'],$_SESSION["cart_item"])){
            echo "hiiii";
        }else{
            echo "byeee";}

但它仍然返回 false。谁能指出我的错误?

顺便说一句,我是新手,提前致谢。

【问题讨论】:

  • 分享你的$_SESSION["cart_item"]数组。
  • 在我第一部分代码的 else { } 中
  • 最好把if(!empty($_SESSION["cart_item"]))改成if(isset($_SESSION["cart_item"]))
  • 查看这个答案:https://3v4l.org/gmu7k
  • 谢谢,我想我注意到我做错了什么:) 祝你有美好的一天

标签: php session


【解决方案1】:

您需要将if(!empty($_SESSION["cart_item"])) 更改为if(isset($_SESSION["cart_item"]))。还要检查 $_SESSION 是否是一个简单的数组,为了匹配in_array,你需要有像我分配的数组。

正如你提到的 _因为我的 $SESSION 有一个多维数组,所以如果你使用 in_array,请确保你的数组是一维的。

让变量像这样:

$_SESSION["cart_item"] = array('1', '2', '3');
$_GET['code'] = '3';

if(isset($_SESSION["cart_item"])) { 
    if(in_array($_GET['code'], $_SESSION["cart_item"])){
        echo "hiiii";
    }else{
        echo "byeee";}
}else {
    $itemArray = array( $_GET['code'] => array('pcode'=> $_GET['code']) );
    $_SESSION["cart_item"] = $itemArray;
}

结果: hiiii

现在是时候使用array_key_exists了。

让我们改变数组:

$_SESSION["cart_item"] = array('1' => array(6, 7, 8), '2' => array(2, 4, 6), '3' => array(1, 5, 9));

if(array_key_exists($_GET['code'], $_SESSION["cart_item"])){
    echo "hiiii from key exists";
}else{
    echo "byeee";
}

结果:来自key的hiiii存在

注意:我想你知道如何使用以及在哪里使用in_arrayarray_key_exists

【讨论】:

  • 嗨,我想我找到了问题所在。当我尝试将 1 个值保存到多维数组中时,我得到 var_dump 来显示输出,这就是我得到的数组(1){ [333]=> 数组(1){ [“pcode”]=>字符串(3)“333”}}。但是,如果我尝试将更多内容保存到会话中,它将变成这个数组(2){[0]=>数组(1){[“pcode”]=>字符串(3)“333”}[1]=>数组( 1) { ["pcode"]=> string(3) "444" } } 键值没有保存我分配给它的值,而是更改为默认值 0,1,2....
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 2015-01-01
  • 2019-03-31
  • 2012-10-11
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多