我有一个分类广告网站,当用户点击广告时,包含广告ID的数组元素会设置为Cookie。
然后在主页上显示“上次访问过的广告”。
问题是,我对“上次访问过的广告”(设置为10)的nr有限制。
因此,如果cookie数组包含10个以上的元素,我希望逐个替换元素。
我设法在cookies-array-length > 10
后只替换数组中的最后一个元素。但它只会覆盖最后一个元素,当我想要它替换下一个元素时(最后一个)。
实施例: Cookie有10个以上的数组元素。 我点击了一则广告。 然后被替换的ad-id是最后一个元素,总是如此。 但是,我希望它从最后一个开始逐个替换元素。 (nr 10,nr 9,nr 8)这样它就不会一直覆盖nr。
以下是代码:
if (isset($_COOKIE['watched_ads'])){
$expir = time()+1728000; //20 days
$ad_arr = unserialize($_COOKIE['watched_ads']);
$arr_elem = count($ad_arr);
for ($i=0; $i<$arr_elem; $i++){
if ($ad_arr[$i] == $ad_id) { $ad_in_cookie_exists = 1;
}
}
if ($arr_elem>10 && $ad_in_cookie_exists!=1){
$ad_arr[$arr_elem-1]=$ad_id; // HERE IS THE PROBLEM, IT REPLACES LAST ONE, CANT FIGURE OUT HOW TO REPLACE ONE BY ONE!
setcookie('watched_ads', serialize($ad_arr), $expir, '/');
}
else if ($ad_in_cookie_exists !=1 && $arr_elem<=10){
$ad_arr[] = $ad_id; echo "andra";
setcookie('watched_ads', serialize($ad_arr), $expir, '/');
}
}
那么,您对如何解决这个问题有任何想法吗?
由于
PS:如果您需要更多输入,请告诉我,我会更新Q!
答案 0 :(得分:0)
为什么不替换最旧的广告点击?因此,不要将其视为[后进先出](http://en.wikipedia.org/wiki/LIFO_(computing))结构,而是将其视为[先进先出](http://en.wikipedia.org/wiki/FIFO_(computing))结构。
if (isset($_COOKIE['watched_ads'])){
$expir = time()+1728000;
$ad_arr = unserialize($_COOKIE['watched_ads']);
$arr_elem = count($ad_arr);
if ( in_array($ad_id) == FALSE ){
if ( $arr_elem > 10 ){
$ad_arr = array_shift($ad_arr);
}
$ad_arr[] = $ad_id;
setcookie('watched_ads', serialize($ad_arr), $expir, '/');
}
}