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 执行类似&lt;a href="?removeitem=itemkey"&gt;remove item&lt;/a&gt; 的操作。

【讨论】:

【参考方案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从数组中删除项目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中删除空值? [复制]

如何删除数组中的项目? [复制]

MySQL/PHP 输出数组重复查询然后显示结果,如何删除查询? [复制]

从一个数组中删除代表另一个数组的重复数据

如何使用过滤器数组删除数组中的项目? [复制]

PHP:从数组中获取值? [复制]