【问题标题】:Delete from array help从阵列帮助中删除
【发布时间】:2010-04-28 01:03:11
【问题描述】:

我有一个将信息存储在数组中的 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, '/');
            }
        }
        }

这不起作用...知道为什么吗?我认为这是未设置部分的问题... 另外,请记住,如果数组中只有一个值,那会发生什么?

谢谢

【问题讨论】:

    标签: php html cookies


    【解决方案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, '/');
    

    【讨论】:

      【解决方案2】:

      array_filter 似乎合适:

      $array = array_filter($array, create_function('$v', 'return $v != '.$id.';'));
      

      【讨论】:

        【解决方案3】:

        你是正确的,你使用 unset 不正确。 The manual on unset states:

        如果一个静态变量里面是 unset() 对于一个函数, unset() 会破坏 仅在上下文中的变量 函数的其余部分。关注电话 将恢复 a 的先前值 变量。

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

        【讨论】:

        • 或者,从 PHP 5 开始,使用引用值 foreach($arr as &$value) php.net/manual/en/control-structures.foreach.php
        • @dnagirl 如果在这种情况下 unset($value) ,则会破坏引用,但不会从数组中删除元素。你仍然需要在 unset 中引用数组。
        • 哎呀!真的。我在想重置是多么方便(不再有array_walk()!),忘记了OP是关于取消设置的。 <blushing/>
        猜你喜欢
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 2013-07-22
        • 2011-08-15
        • 1970-01-01
        相关资源
        最近更新 更多