从多维数组中删除元素

时间:2014-11-25 11:45:04

标签: php arrays 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,基于其他堆栈溢出建议尝试了其他几个选项,但没有运气。我认为我的问题是它是一个嵌套数组,并且不知道调用特定项的语法以及如何将其链接到按钮功能。

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

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

将你的foreach外观改为:

<?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代码将remove事件捕获到这样的东西:

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

另请注意我添加的close和open PHP标记。如果没有echo或关闭PHP标记,就无法在PHP中显示内容。