如何将Cookie放入数组中?

Ano*_*ous 0 php arrays cookies

我正在尝试为cookie存储数组,但是我收到以下错误:

警告:setcookie()期望参数2为字符串,给定数组

我怎样才能将数组实际放入cookie?

编辑2:我编辑了代码,我现在存储了cookie数组,但是我遇到了一个巨大的问题.如果第二个数组的大小较小,它不会覆盖第一次提交的值.

例.第一提交数组[1206,0402],第二提交数组[0402].但结果是[0402,0402],这是错误的.

function cuukko($var,$val){
    setcookie($var,$val,time()+60*60*24*365);
}

function preg_DW($var){
    global $isset;
    if ($isset&&is_array($_POST[$var])&&sizeof($_POST[$var])>0){
        $C=0;
        foreach ($_POST[$var] as $key => $value) {
            $val[$C]=trim(preg_replace('/\s\s+/',' ',preg_replace('/[^\d\w\s\(\)\[\]]+/','',$value)));
            cuukko($var."[".$C."]",$val[$C]);
            $C++;
        }
    } elseif (isset($_COOKIE[$var])) $val=$_COOKIE[$var];
        return (sizeof($val)>0)?$val:array();
}
Run Code Online (Sandbox Code Playgroud)

编辑3:问题已经解决.现在使用的代码:

function cuukko($var,$val){
    setcookie($var,$val,time()+60*60*24*365);
}

function preg_DW($var){
    global $isset;
    if ($isset){
        $C=0;
        if (is_array($_COOKIE[$var]))
        foreach($_COOKIE[$var] as $key =>$trash)
        setcookie("{$var}[".$key.']', '', time()-60*60*24*365);
        if (is_array($_POST[$var]))
        foreach ($_POST[$var] as $key => $value) {
            $val[$C]=trim(preg_replace('/\s\s+/',' ',preg_replace('/[^\d\w\s\(\)\[\]]+/','',$value)));
            cuukko($var."[".$C."]",$val[$C]);
            $C++;
        }
    } elseif (isset($_COOKIE[$var])) $val=$_COOKIE[$var];
        return (sizeof($val)>0)?$val:array();
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*and 6

回答

您可以使用数组语法存储cookie并将其作为多维数组读取:

setcookie('array[key]', 'value');
$var = $_COOKIE['array']['key'];
Run Code Online (Sandbox Code Playgroud)

您的代码如下所示:

for($val as $key=>$value)
  setcookie('vals['.$key.']', $value, time()+60*60*24*365);
Run Code Online (Sandbox Code Playgroud)


多维数组

您也可以使用相同的方式存储多维数组:

setcookie('array[key1][key2]', 'value');
$var = $_COOKIE['array']['key1']['key2'];
Run Code Online (Sandbox Code Playgroud)


清除Cookie

当您需要清除cookie时,有多种方法; 最长的是:

for($_COOKIE['array'] as $key=>$value)
  setcookie('array['.$key.']', '', time()-60*60*24*365);
Run Code Online (Sandbox Code Playgroud)

最简单,最可取的方法是:

setcookie('array', '', time()-60*60*24*365);
Run Code Online (Sandbox Code Playgroud)


结论

Cookie允许使用标准数组语法存储数组.存储多维数组也是标准语法.

要使用数组值销毁cookie,请使用与普通cookie相同的语法,在整个数组或每个特定元素上.

关于这个的文档setcookie().