从多维数组中删除数组

时间:2010-08-13 06:23:39

标签: php

你好,我有一个看起来像这样的会议:

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吗?

4 个答案:

答案 0 :(得分: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]);
   }
}

答案 1 :(得分:1)

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

来自php.net:

从PHP 5开始,您可以使用&前面的$ value来轻松修改数组的元素。这将分配引用而不是复制值。

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

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:1)

即使建议的引用方式应该正常工作,这里有一个没有它的例子:

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