从多维数组中删除元素


Remove an element from multidimensional array

我敢肯定这只是语法问题,因为其他一切都有效。

首先,我创建一个嵌套的多维,它作为会话变量跨多个页面保存。

if(isset($_POST["submit_1"])){
    $quantity = $_POST['quantity'];
    $name = $_POST['name'];
    $size = $_POST['size'];
    $p = $_POST['price'];
    $price = $p * $quantity;
    $item_array = array(0 => array('i_quantity' => $quantity, 'i_name' => $name,'i_size' => $size, 'i_price' => $price));
    $_SESSION["item"][] = $item_array;
}

然后我为我的所有项目调用该代码,创建一个表单按钮,我创建一个数组 ID 变量,只是为了给数组一个从 -1 开始的数字,所以数组从 0 开始;

<?php
$arrayID = -1;
if(empty($_SESSION["item"])){?>
<?php }
else{       
  // add a foreach loop to display all the session items, if exsited. 
  foreach($_SESSION['item'] as $key){   
  foreach($key as $list){
     $arrayID += 1;
     //displays all the items here
     <form method="POST">
       <input type="submit" name="remove">              
     </form>
  }}}
  ?>

所有项目都按原样显示在页面上,现在我想要的是使用该表单按钮使用相应的删除按钮取消设置特定的循环数组项目。

以下是我最好的猜测。

  if(isset($_POST["remove"])){
     unset($_SESSION["item"][$arrayID]);
  } 

我已经把它放在 for 循环内外,到目前为止没有运气。尝试了其他几个选项,根据其他堆栈溢出建议将$arrayID更改为$key和$list,但没有运气。我认为我的问题是它是一个嵌套数组,只是不知道调用特定项目的语法以及如何将其链接到按钮函数。

任何建议都非常感谢。

您可以添加带有索引的隐藏字段,以确定它是哪个会话索引。之后,您可以使用该变量取消设置会话。

将你的前方外观更改为这样的内容:

<?php
$arrayID = -1;
if(empty($_SESSION["item"])){?>
<?php }
else{       
  // add a foreach loop to display all the session items, if exsited. 
  foreach($_SESSION['item'] as $key){   
  foreach($key as $list){
     $arrayID += 1;
     //displays all the items here
?> <!-- Close PHP tag !-->
     <form method="POST">
       <input type="submit" name="remove">     
       <input type="hidden" name="removeIndex" value="<?=$arrayId?>">                         
     </form>
<!-- Re-open PHP tag !--><?php  
  }}}
  ?>

以及您的PHP代码,它将删除事件捕获为如下所示的内容:

if(isset($_POST["remove"])){
 unset($_SESSION["item"][$_POST["removeIndex"]]);
} 

还要注意我添加的关闭和打开的 PHP 标签。你不能在没有回显或关闭PHP标签的情况下在PHP中显示某些内容。