我使用$_SESSION
数组来存储购物车中商品的商品描述,数量和价格。这一切都很有用,这是代码的开头部分:
$quantity = 1;
// add first item from shop page
if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) {
$_SESSION['cart'] = array();
$_SESSION['cart'][$_POST['product_description']] = array('quantity' => $quantity, 'price' => $_POST['product_price']);
header("Location: http://website.com/cart.php");
}
这会在$_SESSION['cart']
数组中加载相应的信息,当我foreach
将其循环到购物车页面时,我会得到购物车的确切内容。所有这些都可以按预期工作。
所以我现在要做的是搜索$_SESSION['cart']
数组以确定特定项是否在$_SESSION['cart']
数组中,例如“iPhone case - Black”。
我尝试了各种形式的echo $_SESSION['cart']['product_description']
并且什么都没得到。当我print_r
数组时,我得到了这个:
Array
(
[iPhone case - Black] => Array
(
[quantity] => 1
[price] => 9.49
)
)
哪个是对的。执行var_dump
会产生预期结果:
array(1) {
["iPhone case - Black"]=>
array(2) {
["quantity"]=>
int(1)
["price"]=>
string(4) "9.49"
}
}
当然,如果有更好的方法来构建数组,我愿意接受它。
我想要做的就是找出“iPhone case - Black”是否在$_SESSION['cart']
数组中,并根据结果提供相应的代码。
我尝试了if (in_array('iPhone case - Black', $_SESSION['cart']))
但没有产生任何结果,当我将其扩展为if (in_array('iPhone case - Black', $_SESSION['cart'][0]))
或...[1]
或...['product_description']
时,我收到了错误消息:
Warning: in_array() expects parameter 2 to be array, null given in...
我错过了什么,只是让我检查$_SESSION['cart']
数组来找到值,“iPhone案例 - 黑色”?我唯一的选择是foreach
循环吗?
提前多多诚挚的谢意!
UPDATE 根据@rmmoul的要求发布代码:
// add first item from shop page
if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) {
$_SESSION['cart'][] = array('product_description'=> $_POST['product_description'], 'quantity' => $quantity, 'price' => $_POST['product_price']);
header("Location: http://website.com/cart.php");
}
通过print_r
:
Array
(
[0] => Array
(
[product_description] => iPhone case - Black
[quantity] => 1
[price] => 9.49
)
[1] => Array
(
[product_description] => iPhone case - Black
[quantity] => 1
[price] => 9.49
)
)
答案 0 :(得分:2)
由于您使用$_POST['product_description']
作为密钥,因此指定的值将成为关键,即'iPhone case - Black'
。
试试这个:
if (isset($_SESSION['cart']['iPhone case - Black'])){
foreach($_SESSION['cart']['iPhone case - Black'] as $key=>$value){
echo $key." ".$value."<br>";
}
答案 1 :(得分:1)
isset
怎么样?
if ( isset( $_SESSION['cart']['iPhone case - Black'] ) )
如果是true
,那么$_SESSION['cart']['iPhone case - Black']
将包含信息:
array(2) {
["quantity"]=>
int(1)
["price"]=>
string(4) "9.49"
}
答案 2 :(得分:1)
您没有将值放入名为“product_description”的密钥中,而是在产品说明后命名密钥。尝试更改此行:
$_SESSION['cart'][$_POST['product_description']] = array('quantity' => $quantity, 'price' => $_POST['product_price']);
要:
$_SESSION['cart'][] = array('product_description'=> $_POST['product_description'], 'quantity' => $quantity, 'price' => $_POST['product_price']);
然后您将能够回显像:
这样的值echo $_SESSION['cart'][0]['quantity'];
echo $_SESSION['cart'][0]['price'];
echo $_SESSION['cart'][0]['price'];
这也应该让你轻松拥有多个产品,如$ _SESSION ['cart'] [0],$ _SESSION ['cart'] [1]等。
然后,您可以遍历购物车数组以检查某些项目,如下所示:
foreach($_SESSION['cart'] as $product)
{
if($product['product_description'] == 'black iphone')
{
//do something here
echo $product['price'];
}
}
虽然这是未经测试的,并且是从内存中编写的,所以可能需要稍微调整才能让它运行,但是它有一个应该对你有用的要点。
编辑:
我更新了foreach更有用。