PHP从数组中删除项目? [复制]
Posted
技术标签:
【中文标题】PHP从数组中删除项目? [复制]【英文标题】:PHP Remove items from Array? [duplicate] 【发布时间】:2011-10-30 16:40:25 【问题描述】:可能重复: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
【问题讨论】:
答案也在 SO here 【参考方案1】:您可以使用http://php.net/manual/en/function.unset.php 从数组中删除项目。
不过,您必须弄清楚代码:)
【讨论】:
【参考方案2】:unset($array[$key]);
manual
【讨论】:
【参考方案3】:if(isset($_REQUEST['removeitem']))
unset($items[$_REQUEST['removeitem']]);
其中 $_REQUEST['removeitem'] 是您要删除的项目的键。然后让您的 href 执行类似<a href="?removeitem=itemkey">remove item</a>
的操作。
【讨论】:
【参考方案4】:关于您的删除功能,您可以只使用一个复选框(甚至是提交按钮),例如:
echo "<td><input type=checkbox name='remove[$key]' value=1>remove</td>";
(注意输出中的所有变量 ($key
) 也需要 htmlspecialchars()
处理。)
然后,如果再次提交购物篮表单,您可以简单地探测要删除的元素:
foreach ($_REQUEST["remove"] as $key)
unset($_SESSION["items"][$key]);
【讨论】:
【参考方案5】:首先,改变这一行:
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 在“幕后”删除项目。
【讨论】:
【参考方案6】:将表格设为表单,将行的最后一个元素设为 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
?>
或类似的东西。
【讨论】:
【参考方案7】:首先,您必须使用准备好的语句来防止 SQL 注入和过滤目的。为此使用 PDO。
但我不确定,因为您没有为用户创建任何链接以删除他们的项目。
首先您必须为所有项目创建一个唯一的 ID,以便您轻松删除,例如:
echo '<a href="delate.php?$item_id">Remove</a>'
【讨论】:
以上是关于PHP从数组中删除项目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章