用Foreach循环检索几个键值对


Retrieve several Key-Value Pairs with Foreach loop

我已经尝试了好几天了(在SO上读了大约20篇文章),似乎可以找到解决我问题的方法。我需要使用foreach循环遍历会话数组以检索三个(可能更多)键值对,这也需要在后续查询中使用。

我需要这个,因为我们产品的价格变化取决于不止一个因素。

我最初使用for循环创建了一个购物车。这是我所需要的(你将在下面看到),但是当我试图删除项目时,我遇到了麻烦。我从SO上的一个问题帖子中学到,我必须使用foreach循环。我对它进行了相应的更改,它可以工作,但只有在我有一个键值对的情况下。

是否有一种方法来实现我需要一个foreach循环?如果有,怎么做?

下面是我需要的cart-session数组:

$_SESSION['shop_cart'][$prodid]=$quantity;
$_SESSION['shop_cart']['season_price']=$season_priceid;

?

$_SESSION['shop_cart']['prodid']=$prodid;
$_SESSION['shop_cart']['quantity']=$quantity;
$_SESSION['shop_cart']['season_price']=$season_priceid; //This is the third variable I need

下面是我的foreach循环的代码(包含前面for循环的注释/注释),但只能使用一个键值对。

$prodid = $_POST['prodid'];
$quantity = $_POST['quantity'];
$season_priceid=$_POST['season_priceid'];
$empty= $_POST['empty']; 
$removed = $_POST['remove'];
$counter= $_POST['counter'];
if(isset($prodid))
{
 $_SESSION['shop_cart'][$prodid] = $quantity; 
}
   if (isset($empty ))
    {
    unset($_SESSION['shop_cart']);
    }

if (!isset($_SESSION['shop_cart']))//Checking if Session is Set or empty
   {
      unset($_SESSION['shop_cart']);
      echo "Cart is empty";
   }
   else
   {
      if(count($_SESSION['shop_cart'])==NULL || count($_SESSION['shop_cart'])==0 )
      {
         echo "Cart is empty";
      }
   }

    if (isset($removed)) 
    {
    foreach ($_SESSION['shop_cart'] as $cart_line_item => $item)
       {
        if($prodid==$item['prodid'])
            {
            unset($_SESSION['shop_cart'][$cart_line_item]); 
            continue;
            }   
        }
    }

  $_SESSION['shop_cart'][$prodid] = $quantity;           

$total=0; //For Price
 if (isset($_SESSION['shop_cart']))  
  {
    /*
    for($i=0;$i<count($_SESSION['shop_cart']);$i++) //The previous FOR LOOP works but cannot delete items correctly
    */
    foreach ($_SESSION['shop_cart'] as $prodid => $quantity)
    {
        /* //This is how the cart-display array was created with the FOR LOOP. As you can see here, I need three values to show in my cart array
        $prodid=$_SESSION['shop_cart'][$i]['prodid'];
        $quantity=$_SESSION['shop_cart'][$i]['quantity'];
        $season_priceid =$_SESSION['shop_cart'][$i]['season_priceid'];
        */
        $query = "SELECT prodid, description, price FROM products, seasons WHERE prodid = $prodid AND season_id= $season_priceid"; //###I NEED THIS THIRD VARIABLE next variable to get the right price)###
        $result = mysqli_query($hook, $query);
        $row = mysqli_fetch_assoc($result);
        $prodid = $row['prodid'];
        $price = $row['price'];
        $description= $row['description'];

        $subtotal = $price * $quantity;
                     $total += $subtotal;
echo "$description($prodid)---Quantity: $quantity--- $$price";      
echo "<form action='"$_SERVER[SCRIPT_NAME]'" method='"post'" >";
echo "<INPUT TYPE='"submit'" name='"remove'" VALUE='"Remove'">";
echo "<input type='"hidden'" name='"prodid'" value=$prodid />'n";
echo "</FORM>";
echo "--------------------------<br/><br/>";
    }                                                             
  }
echo "TOTAL $total <br/><br/>";
echo '<pre>'. var_dump( $_SESSION['shop_cart']).'<pre/>';
echo "<br/>";
echo "<form action='"$_SERVER[SCRIPT_NAME]'" method='"post'" >";
echo "<INPUT TYPE='"submit'" name='"empty'" VALUE='"Empty Cart '">";
echo "</FORM>";

尝试了以下操作,但没有效果:

    foreach ($shop_cart as $key =>$val) {           
                $season_priceid = $key['season_priceid'];
            //OR
                $season_priceid = $val['season_priceid'];     
        }
///////////
    foreach ($shop_cart as $val) {
        $season_priceid = $val['season_priceid'];
    }

///////////
    foreach ($shop_cart as $cart_arrays) {
                $season_priceid =$shop_cart['season_priceid'];
    }

如果有帮助的话,这是我的数组在不同循环中的样子:

FOR LOOP ARRAY
array(3) { [0]=> array(3) { ["prodid"]=> string(2) "13" ["quantity"]=> string(1) "1" ["season_priceid"]=> NULL } [1]=> array(3) { ["prodid"]=> string(1) "6" ["quantity"]=> string(1) "1" ["season_priceid"]=> NULL } [2]=> array(3) { ["prodid"]=> string(1) "2" ["quantity"]=> string(1) "1" ["season_priceid"]=> NULL } }

FOREACH ARRAY (but I need a third element/value : "season_priceid")
array(3) { [2]=> string(1) "1" [6]=> string(1) "1" [3]=> string(1) "1" }

所以代码中的真正问题是会话中的season_priceid为NULL。这意味着用于设置season_priceid的代码不能正确工作。因为你的代码没有显示你的会话设置,我不能帮助你,但这里是我建议如何设置你的购物车会话数据:

'shop_cart' => array (
    '14' => array ( // 14 is product id
        'quantity' => 1,
        'season_priceid' => 1
    ),
    '15' => array ( // 15 is product id
        'quantity' => 1,
        'season_priceid' => 1
    ),
)

这样你就可以像这样循环浏览你的购物车:

foreach ($_SESSION['shop_cart'] as $prodid => $product) {
    echo $prodid;                    // product id
    echo $product['quantity'];       // quantity
    echo $product['season_priceid']; // season price id
    // to delete the product from the session
    unset($_SESSION['shop_cart'][$prodid];
   // to edit the product quantity
   $_SESSION['shop_cart'][$prodid]['quantity'] = 2;
}