从数组帮助中删除

时间:2010-04-27 16:56:03

标签: php html cookies

我有一个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, '/');
            }
        }
        }

这不起作用......任何想法为什么?我认为它与未设置的部分存在问题...... 另外,请记住,如果数组中只有一个值,那么会发生什么?

由于

3 个答案:

答案 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]);
...