你好,我有一个看起来像这样的会议:
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吗?
答案 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]);
}
}