我有一个cookie,它将信息存储在一个数组中。
这适用于分类广告网站,每当用户删除其“广告”时,也必须删除已删除广告的Cookie。
所以我有这个:
if (isset($_COOKIE['watched_ads'])){
$expir = time()+1728000;
$ad_arr = unserialize($_COOKIE['watched_ads']);
foreach($ad_arr as $val){
if($val==$id){ // $id is something like "bmw_m3_10141912"
unset($val);
setcookie('watched_ads', serialize($ad_arr), $expir, '/');
}
}
}
这不起作用......任何想法为什么?我认为它与未设置的部分存在问题...... 另外,请记住,如果数组中只有一个值,那么会发生什么?
由于
答案 0 :(得分:1)
你有两个错误:1)你取消了$val
而不是数组元素本身。 2)您将循环中的cookie设置为未知的$ad_arr2
数组。
foreach($ad_arr as $key => $val){
if($val==$id){ // $id is something like "bmw_m3_10141912"
unset($ad_arr[$key]);
}
}
setcookie('watched_ads', serialize($ad_arr), $expir, '/');
答案 1 :(得分:0)
array_filter
似乎合适:
$array = array_filter($array, create_function('$v', 'return $v != '.$id.';'));
答案 2 :(得分:0)
您正确使用未正确设置是正确的。 The manual on unset states:
如果静态变量在内部未设置() 一个函数,unset()破坏了 变量只在上下文中 其余的功能。跟着电话 将恢复前一个值 变量
When you use 'as' you're assigning the value of that array element to a temporary variable。您想引用原始数组:
foreach ($ad_arr as $key => $val)
...
unset($ad_arr[$key]);
...