私はプロジェクトのためにカートに取り組み、問題を抱えています。私は本当にそれを自分自身で整理しようとしましたが、同じ問題です。 基本的に、人々はカートに送るためのドロップダウンメニューから靴のサイズを選択します。そしてコードがチェックされます:連想配列を別の配列の末尾に追加する方法は?
- をセッションカート内の値がすでにある-if:同じ値がidと大きさのために、我々は既存の値-if
の数量を増やす場合は、すでに値が存在セッションカートで:id値が同じでサイズ値が異なる場合は、それは新しい値で、 に既存の値を追加します。
最初にコードが正常に動作するかどうかチェックするために、セッションカート内の既存の値をチェックします。同じIDで同じサイズの場合、qtyは上がります。
問題は2番目のチェックにあります。ドロップダウンで別のサイズを選択しても同じアイテムIDを使用すると、新しい値(IDとサイズ)がカートの既存の値を消去するだけです。アイテムIDは同じですが、異なるサイズを持っている場合、それは新しい値であり、その配列の値が新しい値としてセッションカートの最後に追加する必要がありますどのような私がしたいことということです
ここで
は私のコードです:ここでは
<?php
$items = array(
array('id' => '1', 'desc' => 'sneaker','price' => 24.95, 'size'=>'424546'),
array('id' => '2', 'desc' => 'Reebok','price' => 200, 'size'=>'323845'),
array('id' => '3', 'desc' => 'Songs of the Goldfish (2CD set)','price' => 19.99),
array('id' => '4', 'desc' => 'Simply JavaScript (SitePoint)', 'price' => 39.95)
);
session_start();
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
if (isset($_POST['action']) and $_POST['action'] == 'Buy') {
$size="";
//Get the values for the post and make sure they are integers
$pid = filter_var($_POST['id'], FILTER_VALIDATE_INT, array('min_range'=> 1));
$size = $_POST['doSize'];
if (isset($_SESSION['cart'][$pid])) {
foreach ($_SESSION['cart'] as $key) {
if ($key['id'] === $pid and $key['size'] !== $size) {
echo "NOT SAME SIZE";
$si = $size;
$_SESSION['cart'][$key['id']] = array('id'=>$pid, 'size'=>$si, 'quantity'=>1);
}
elseif ($key['id'] === $pid and $key['size']=== $size) {
$_SESSION['cart'][$key['id']]['quantity']++;
echo "YES CORRECT";
}
}//end foreach
print_r($_SESSION['cart']);
}//end isset session cart
else{
$_SESSION['cart'][$pid]= array('id'=>$pid, 'size'=>$size, 'quantity'=>1);
foreach ($_SESSION['cart'] as $key) {
echo $key['id'];
}
print_r($_SESSION['cart']);
}
}//END POST
include'cat.html';
//unset($_SESSION['cart']);
?>
cart.html
<!DOCTYPE html>
<head>
<title>Product catalog</title>
<meta http-equiv="content-type"
content="text/html; charset=utf-8" />
<style type="text/css">
table {
border-collapse: collapse;
}
td, th {
border: 1px solid black;
}
</style>
</head>
<body>
<p>Your cart contains <?php echo count($_SESSION['cart']);?> item(s).</p>
<p><a href="?cart">View your cart</a></p>
<table border="1">
<thead>
<tr>
<th>Item Description</th>
<th>Price</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<?php foreach ($items as $item): ?>
<tr>
<td><?php echo $item['desc']; ?></td>
<td>
$<?php echo number_format($item['price'], 2); ?>
</td>
<td>
<form action="" method="post">
<?php if (isset($item['size'])) { ?>
<select name="doSize">
<?php foreach(str_split($item['size'], 2) as $size):?>
<option value="<?php echo $size;?>"><?php echo $size;?></option>
<?php endforeach;?>
</select>
<?php }?>
</td>
<td>
<div>
<input type="hidden" name="id" value="<?php echo $item['id']; ?>"/>
<input type="submit" name="action" value="Buy"/>
</div>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p>All prices are in imaginary dollars.</p>
</body>
</html>
あなたの質問や問題は何ですか? –
このエラーは常に表示されます。現在のアイテムがユーザーの選択と一致しないという理由だけで、カート配列をループすると、項目が異なる配列要素に含まれる可能性があるため、見つからなかったわけではありません。なぜこれは初心者プログラマーが得るための難しいコンセプトなのでしょうか?発見されたかどうかを知る前に、配列全体を調べるまで待たなければなりません。 – Barmar
@Barmar:Okですが、条件比較を使用して値が存在することを確認しましたか?私のやり方は正しいのではないですか? –