我来寻求所有聪明聪明人的智慧!昨天整天看了几天后,我已经放弃了。我尝试了很多东西,但没有任何工作,我得出结论这个问题超出了我的技能。我的PHP技能非常基础,而且不是很先进。
我用$ _SESSION创建了一个简单的购物车。结帐页面根据本教程http://keito.me/dynamicweb/11/
将订单信息提供给我工作得很好的购物车页面物品通过foreach循环添加到汽车中。
我的问题是我无法删除添加到购物车的商品。我想要删除按钮来删除该特定项目,而不是整个订单。
有没有办法按密钥删除数组值?因为每个项目都有一个唯一的密钥号码。到目前为止,我找不到任何答案。所有我能找到的都是未设置的。但是我找不到从特定键取消设置数组的方法。以下是显示和循环项目的代码。
所以我的问题是:它是否可能,如何根据键号删除数组?或者只是简单地说,我如何删除添加到表中的每个项目。
if (!isset($_SESSION['cart']) || (count($_SESSION['cart']) == 0)) {
echo '<p>Your cart is empty.</p>';
} else {
echo '<table id="myTable" width="100%" border="1" cellpadding="3" cellspacing="1">
<tr><th>Door Model</th><th>Door Size</th><th>Door Information</th><th>Quantity</th> <th>Subtotal</th></tr>';
$total = 0;
$bananas = $_SESSION['cart'];
foreach($bananas as $key =>$item) {
echo "<tr><td align='center' width='10%' valign='top'>{$item['1']}
</td><td width='10%' align='center' valign='top'>{$item['2']}</td>
<td valign='top'>{$item['4']}
<form method='post' action='{$_SERVER['PHP_SELF']}'>
<p>Key = $key Item = $item</p>
<input name='submited$key' type='submit' value='Remove' />
</form>
<p><a href='unset.php'>Remove</a> <a href='#'>Edit</a></p></td>
<td align='center' valign='top' cellpadding='3' width='5%'>{$item['3']}</td>
<td width='10%'align='center' valign='top'>$".number_format($item['6'] * $item['3'],2)."</td></tr>";
$total += ($item['6'] * $item['1']);
}
echo "<tr><th colspan='5' scope='row'><p style='float: right'><strong>Grand total: </strong>\$".number_format($total, 2);"</p></th></tr>";
echo '</table>';
}
?>
答案 0 :(得分:0)
一个简单的unset($ array [$ key])应该可以解决这个问题。
然而,它不适用于传递引用值。
答案 1 :(得分:0)
使用unsset($ array [$ index])这将从数组中删除索引。
答案 2 :(得分:0)
如果你需要从$ bananas数组中删除:
$bananas = $_SESSION['cart'];
foreach($bananas as $key => $item) {
// do something with $bananas[$key]
unset($bananas[$key]);
}
如果您需要从会话中删除:
$bananas = $_SESSION['cart'];
foreach($bananas as $key => $item) {
// do something with $bananas[$key]
unset($_SESSION['cart'][$key]);
}
答案 3 :(得分:0)
您可以使用ArrayIterator: -
$array = array('zero', 'one','two','three','four','five','six','seven');
$iterator = new \ArrayIterator($array);
var_dump($iterator);
$iterator->offsetUnset('3');
var_dump($iterator);
输出: -
object(ArrayIterator)[1]
string 'zero' (length=4)
string 'one' (length=3)
string 'two' (length=3)
string 'three' (length=5)
string 'four' (length=4)
string 'five' (length=4)
string 'six' (length=3)
string 'seven' (length=5)
object(ArrayIterator)[1]
string 'zero' (length=4)
string 'one' (length=3)
string 'two' (length=3)
string 'four' (length=4)
string 'five' (length=4)
string 'six' (length=3)
string 'seven' (length=5)
如您所见,已删除索引为3的元素。
答案 4 :(得分:0)
首先,如果我是你,我不会使用PHP,PHP将需要重新加载才能工作,尽管你可以使用一个非常简单的JQuery字符串来为你完成工作,具有良好的图形效果,而且没有需要页面重新加载,
只需为“删除按钮”声明一个特定的ID(或类),然后使用这个简单的脚本定位该ID:
<script>
$(function () {
$('a#delete_row').live('click', function() {
$(this).parent().parent().parent().animate({ backgroundColor: "#ffcece" }, 'fast' , function() {
$(this).fadeOut( function() {
$(this).remove();
});
});
});
});
</script>
这将删除具有漂亮图形声明的表项,并将其从DOM树中拉出,以便在发布表单时实际删除“不仅隐藏”。
注意:我使用(实时)选择器使其在购物车变大时动态更新,
您需要其他JQuery内容才能在删除后从总计中“推断”此商品价格...