0

我来寻求你们所有聪明人和聪明人的智慧!昨天看了一整天,今天看了几个小时,我放弃了。我尝试了很多东西,但没有任何效果,我得出的结论是这个问题超出了我的技能范围。我的 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>';


  }
?>
4

5 回答 5

0

使用 unsset($array[$index]) 这将从数组中删除索引。

于 2013-05-17T18:39:07.403 回答
0

一个简单的 unset($array[$key]) 应该可以解决问题。

但是,它不适用于传递引用值。

于 2013-05-17T18:34:27.193 回答
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]);
}
于 2013-05-17T18:44:03.690 回答
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 的元素已被删除。

于 2013-05-17T18:45:37.450 回答
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 东西来在移除后从总计中“推断”该项目的价格......

于 2013-05-17T19:13:26.287 回答