检查会话数组的值(PHP in_array)

时间:2014-11-17 02:27:39

标签: php arrays session

我的简单购物车将产品ID存储在会话数组中。

我正在尝试设置if / else语句,以根据数组中的产品ID启用/禁用我的“添加到购物车”按钮。

<?php
session_start();

//Show cart array

print_r($_SESSION['cart']);
echo '<br><br>';

//Return "yes" or "no"

$panier = $_SESSION['cart'];
$produit = "5";

if (in_array($produit, $panier)) {
print "yes man!";
} 
else {
print "no man!";
}

?>

我通过显示这个测试页面来确保5是数组值的一部分,但第二部分总是返回“没有人!”

看起来很简单。我做错了什么?

print_r命令输出

5,5

no man! 

这是因为我已将“5”产品ID中的2个添加到我的购物车

如果我更改此行

 print_r($_SESSION['cart']);

 print_r($_SESSION);

我得到了

 Array ( [cart] => 5,3,3,3,3,3,3,3,2 )

 no man!

2 个答案:

答案 0 :(得分:3)

所以,根据你,$_SESSION['cart'] = "5,5";,这意味着它是一个字符串。因此,查找价值的正确代码是strpos()

$pos = strpos($produit, $_SESSION['cart']);
if($pos !== false) {
    echo "YES";
}
else {
    echo "NO";
}

但是为此得到错误答案存在巨大风险。想象一下,你的购物车中有两个产品 - 第一个是id 15,另一个是id 7.你将会找到id 5.上面的代码会输出什么?它将输出“是”。

因此,我建议您使用多维数组(如果您想坚持使用会话),而不是使用字符串。在这种特殊情况下,变量$_SESSION["cart"]将是一个数组,并且添加新产品时它将如下所示:

$_SESSION["cart"] = array(); // initial value, don't call it every time or it'll flush your array
$_SESSION["cart"][] = $product_ID;

或类似于它。

print_r会给你一个类似的输出:

Array(
    cart => array(
        [0] => 5
        [1] => 17
        [2] => 5
    )
)

然后,in_array应该有效。但是,明智地计划你的存储;)

答案 1 :(得分:0)

正如jon所说,最好总是把你的程序输出但是现在我怀疑你的问题是在in_array中检查这个链接A problem about in_array它可能有帮助