【问题标题】:PHP Remove items from Array? [duplicate]PHP从数组中删除项目? [复制]
【发布时间】: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

标签: php


【解决方案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>'
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-07-30
                • 2011-02-21
                • 1970-01-01
                • 1970-01-01
                • 2020-07-17
                • 2011-04-26
                • 1970-01-01
                相关资源
                最近更新 更多