我的简单购物车将产品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!
答案 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它可能有帮助