2014-11-25 106 views
0

我确定这只是一个语法问题,因为其他所有工作。从多维数组中删除一个元素

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

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; 
} 

然后调用用于我的所有项目的代码,创建一个表格按钮和I创建阵列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,但没有运气。我认为我的问题是它是一个嵌套数组,只是不知道调用特定项目的语法以及如何将其链接到按钮函数。

任何建议非常感谢。

回答

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代码,赶上删除事件是这样的:

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

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

+0

谢谢你,抱歉没有包含php的具体细节。我确实有他们全部。 – Paddy 2014-11-25 12:20:10