如何按键号删除数组的值。它甚至可能吗?

时间:2013-05-17 18:30:21

标签: php arrays foreach session-variables shopping-cart

我来寻求所有聪明聪明人的智慧!昨天整天看了几天后,我已经放弃了。我尝试了很多东西,但没有任何工作,我得出结论这个问题超出了我的技能。我的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>';


  }
?>

5 个答案:

答案 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内容才能在删除后从总计中“推断”此商品价格...