开发者

removing array from multidimensional array

开发者 https://www.devze.com 2023-01-11 15:34 出处:网络
I have a session that looks like this: array(3) { [\"counter\"]=> int(0) [\"currentItem\"]=> string(1) \"2\"

I have a session that looks like this:

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

Now, from $_SESSION['addedToCart] I would like to remove arrays if they meet to certain conditions. I have tried the following.

foreach ($_SESSION["addedToCart"] as $arr) {
      开发者_运维问答 if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) {
            unset($arr);
       }
 }

This doesn't seem to work, it doesn't remove anything, I did a var_dump to check if the variables $stoeltje and $id were fine and they were fine so that cant be the problem. Am I able to use unset in this kind of situation?


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

& turns your variable into a reference instead of a copy. Normally this would be sufficient. unset() only works on data within the current scope (so your foreach loop) leaving the original unchanged (See unset() for details).

Instead you can do:

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


Even if the suggested way with the reference should work normally, here's an example without it:

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


It doesn't work, because foreach is working on a copy, therefore $arr is just a copy of each element in the main table.

from php.net:

As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.

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


Try this:

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

精彩评论

暂无评论...
验证码 换一张
取 消