我有一个代码,每次访问一个页面时都会为数组添加一个数字。数字存储在cookie中,稍后检索。
我想只保留数组中最近的5个数字。
如果数组已满(5个项目)并且必须添加新号码,则必须删除最旧的号码,并且必须保留最新的项目
这就是我所拥有的:
$lastviewedarticles = array();
if (isset($_COOKIE["viewed_articles"]) ) {
$lastviewedarticles = unserialize($_COOKIE["viewed_articles"]);
}
if (!in_array($articleid, $lastviewedarticles)){
$lastviewedarticles[] = $articleid;
}
setcookie("viewed_articles", serialize($lastviewedarticles));
答案 0 :(得分:154)
array_slice返回一个数组的片段
array_slice($array, 0, 5) // return the first five elements
答案 1 :(得分:6)
使用array_splice和array_unique获取5个唯一数组值
array_splice(array_unique($lastviewedarticles), 0, 5);
答案 2 :(得分:4)
首先我认为,你需要获得数组长度,然后如果长度> gt;或等于5,删除第一个元素,并将元素添加到数组的末尾。
if (!in_array($articleid, $lastviewedarticles)){
$count = count($lastviewedarticles);
if($count>=5)
array_shift($lastviewedarticles);
$lastviewedarticles[] = $articleid;
}
答案 3 :(得分:0)
使用计数器访问数组,在每次调用时递增它,并使用模数运算写入数组。如果您的计数器必须持续多次调用,则必须将其存储在会话变量或cookie中。
假设$ i持有您的计数器变量,这看起来像
if (!in_array($articleid, $lastviewedarticles)){
$lastviewedarticles[$i%5] = $articleid;
$i++;
}
结果是一个原始的环形缓冲区,它总是包含最后5个值。