PHP从数组中删除项目?

时间:2011-08-19 14:39:58

标签: php

  

可能重复:
  PHP: How to remove specific element from an array?

我有一个用于存放购物篮信息的数组:

session_start();

$items = $_SESSION['items'];
$values = $_SESSION['values'];


if (isset($_POST['addtobasket']))
{


       $items[] = $_POST['item'];
       $values[] = $_POST['value'];
       $_SESSION['items'] = $items;
       $_SESSION['values'] = $values;
}

        print("Added " . $_POST['item'] . " with value of " . $_POST['value'] . "to basket");

?>

在结帐屏幕上,我希望用户能够删除项目:

<?                                  
                            echo "<table class='basketdisplay'>";
                            echo "<tr><td>Item</td><td>Price</td></tr>";
                            foreach($items as $key => $item)
                            {                                  
                                   echo "<tr>"; 
                                   echo "<td>" . $item . "</td>";
                                   echo "<td>£" . $values[$key] . "</td>"; 
                                   echo "<td>" . $key . "</td>";
                                   echo "</tr>";      
                            }



                            echo "</table>";
?>

那么代替显示该键的最后一列,是某种形式的按钮来删除该键上的项目吗?

有谁知道我会怎么做,我的php不强。 TIA

7 个答案:

答案 0 :(得分:2)

您可以使用http://php.net/manual/en/function.unset.php从数组中删除项目。

你必须要编写代码:)

答案 1 :(得分:1)

unset($array[$key]);

manual

答案 2 :(得分:0)

if(isset($_REQUEST['removeitem']))
{
    unset($items[$_REQUEST['removeitem']]);
}

其中$ _REQUEST ['removeitem']是您要删除的项目的键。然后让你的href执行<a href="?removeitem=itemkey">remove item</a>

之类的操作

答案 3 :(得分:0)

关于删除功能,您可以使用复选框(甚至提交按钮),例如:

echo "<td><input type=checkbox name='remove[$key]' value=1>remove</td>";

(请注意输出中的所有变量($key)也需要htmlspecialchars()处理。)

然后,如果再次提交购物篮形式,您只需通过以下方式探测要移除的元素:

foreach ($_REQUEST["remove"] as $key) {
    unset($_SESSION["items"][$key]);
}

答案 4 :(得分:0)

首先,改变这一行:

echo "<td>" . $key . "</td>";

到此:

echo "<td><a href='new_php_page.php?key=$key'>Remove Item</td>";

new_php_page.php:

<?php

session_start();

$items = $_SESSION['items'];

// validate session key here - that it is an integer etc.

if (array_key_exists($_POST['key'], $_SESSION['items'])) {
  unset($_SESSION['items']);
}

// redirect to cart page again

?>

改进是将链接替换为按钮。然后,您可以考虑使用AJAX将项目移除“幕后”。

答案 5 :(得分:0)

首先,您必须使用预准备语句来阻止SQL注入和过滤目的。使用PDO。

但我不确定,因为您没有为用户删除其项目的任何链接。

首先,您必须为所有项目创建一个唯一ID,以便您轻松删除,例如:

echo '<a href="delate.php?$item_id">Remove</a>'

答案 6 :(得分:0)

将表格作为表格,并将行的最后一个元素设为HTML输入字段:

<FORM target="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<?php
echo "<table class='basketdisplay'>";
echo "<tr><td>Item</td><td>Price</td></tr>";
foreach($items as $key => $item)
{                                  
    echo "<tr>"; 
    echo "<td>" . $item . "</td>";
    echo "<td>£" . $values[$key] . "</td>"; 
?>

<TD>
    <INPUT type="submit" name="DELETE_<?php echo $key; ?>" value="Delete"/>
</TD>
<?php
    echo "</tr>";      
}
echo "</table>";
?>
</FORM>

然后在脚本开头使用类似:

<?php
foreach ($_POST as $name=>$value)
{
    if (preg_match('/^DELETE_(\d+)$/',$name,$matches)) //Assumes that $key is numeric
    {
        $keyToDelete=$matches[1];
        // Put your delete code in here
    }
}
?>

或类似的东西。