2010-08-13 173 views
4

你好,我甲肝é,看起来像这样的会议:从多维数组删除阵列

array(3) { 
    ["counter"]=> 
    int(0) 
    ["currentItem"]=> 
    string(1) "2" 
    ["addedToCart"]=> 
    array(12) { 
    [0]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(2) "21" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    [1]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(1) "7" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    [2]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(2) "22" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    } 
} 

现在,从$_SESSION['addedToCart]我想,如果他们满足于像某些条件删除阵列。我已经尝试了以下。

foreach ($_SESSION["addedToCart"] as $arr) { 
     if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) { 
      unset($arr); 
     } 
} 

这似乎没有工作,它不删除任何东西,我做了的var_dump检查变量$ stoeltje并且$ id都很好,因此再也无法成为问题,他们都很好。 我能在这种情况下使用unset吗?

回答

5
foreach ($_SESSION["addedToCart"] as &$arr) 

&将您的变量为基准,而不是一个副本。通常这就足够了。 unset()只适用于当前范围内的数据(因此您的foreach循环)将原始数据保持不变(有关详细信息,请参阅unset())。

相反,你可以这样做:

foreach ($_SESSION["addedToCart"] as $key => $val) 
{ 
    if ($val["stoeltjes"] == $stoeltje && $val['film_id'] == $id) { 
     unset($_SESSION["addedToCart"][$key]); 
    } 
} 
+0

我修改它像你说的: foreach($ _SESSION [“addedToCart”] as&$ arr){ if($ arr [“stoeltjes” ] == $ stoeltje && $ arr ['film_id'] == $ id){ \t echo“test”; unset($ arr); } } 但它仍然无法正常工作,编号确实打印回声,所以我很肯定地进入if语句 – vincent 2010-08-13 06:37:35

+0

@vincent:查看我更新的答案。 – jasonbar 2010-08-13 07:26:50

+0

是的,这工作,tyvm – vincent 2010-08-13 08:18:56

1

它不起作用,因为foreach正在处理副本,因此$ arr只是主表中每个元素的副本。

从php.net:

PHP 5起,可以很容易地通过$值与前述&修改数组的元素。这将分配参考而不是复制该值。

$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
    $value = $value * 2; 
} 
// $arr is now array(2, 4, 6, 8) 
+0

我修改它就像你说:foreach($ _SESSION [“addedToCart”]作为&$ arr){if($ arr [“stoeltjes”] == $ stoeltje && $ arr ['film_id'] == $ id){ech ○“测试”;未设置($ ARR); }}但它仍然不起作用,id确实打印了回显,因此我很肯定地进入if语句 – vincent 2010-08-13 06:48:16

+0

是的。取消设置$ arr只是删除了引用,而主表仍然引用相同的内容。我修好了,但你已经有了一个完整的答案;) – naugtur 2010-08-13 11:18:35

1

试试这个:

$arr = array(1, 2, 3, 4); 
foreach ($arr as $key => &$value) { 
    if ($value == 2) 
    { 
     unset($arr[$key]); 
    } 
} 
print_r($arr); 
+0

,但不知道如何实现,到我的代码 – vincent 2010-08-13 07:17:10

1

即使与参考建议的方式应正常工作,这里有没有它的一个例子:

foreach ($_SESSION["addedToCart"] as $key => $arr) { 
     if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) { 
      unset($_SESSION["addedToCart"][$key]); 
     } 
} 
+0

是的,这工作,tyvm – vincent 2010-08-13 08:19:55