我正在尝试为cookie存储数组,但是我收到以下错误:
警告:setcookie()期望参数2为字符串,给定数组
如何将数组实际放入cookie?
EDIT2:我编辑了代码,我现在存储了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();
}
编辑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();
}
答案 0 :(得分:6)
您可以使用数组语法存储Cookie并将其作为多维数组读取:
setcookie('array[key]', 'value');
$var = $_COOKIE['array']['key'];
您的代码如下所示:
for($val as $key=>$value)
setcookie('vals['.$key.']', $value, time()+60*60*24*365);
您也可以使用相同的方式存储多维数组:
setcookie('array[key1][key2]', 'value');
$var = $_COOKIE['array']['key1']['key2'];
当您需要清除cookie时,有多种方法;最长的是:
for($_COOKIE['array'] as $key=>$value)
setcookie('array['.$key.']', '', time()-60*60*24*365);
最简单,最可取的方法是:
setcookie('array', '', time()-60*60*24*365);
Cookie允许使用标准数组语法存储数组。存储多维数组也是标准语法。
要使用数组值销毁cookie,请使用与普通cookie相同的语法,在整个数组或每个特定元素上。
答案 1 :(得分:0)
另一种解决方案是使用serialize()和unserialize将cookie数据存储在一个cookie或json_encode()中。虽然标准数组语法的行为类似于数组,但实际上您设置了多个cookie以使其工作,这看起来很浪费。所以,使用PHP文档自己的例子
// set the cookies
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");
//On next pageload $_COOKIE['cookie'] = array ('one' => 'cookieone', 'two'=>'cookietwo', 'three' => 'cookiethree');
您刚刚设置了3个Cookie。
$array = array('value1', 'value2', 'value3');
setcookie('cookie', serialize($array);
//On next pageload
$array = unserialize($_COOKIE['cookie']);
您已使用相同的数据设置了一个cookie而不是三个。