【问题标题】:Limit array to 5 items将数组限制为 5 个项目
【发布时间】:2013-03-07 07:46:35
【问题描述】:

我有一个代码,每次访问页面时都会向数组添加一个数字。这些数字存储在 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));

【问题讨论】:

标签: php arrays


【解决方案1】:

array_slice 返回数组的切片

array_slice($array, 0, 5) // return the first five elements

【讨论】:

  • 来自文档:如果数组比长度短,那么只会出现可用的数组元素。
【解决方案2】:

使用 array_splice 和 array_unique 获得 5 个唯一的数组值

array_splice(array_unique($lastviewedarticles), 0, 5);

【讨论】:

  • 这对我有用,但使用 array_slice 而不是 array_splice,所以根据 Nirav 的回答,我建议使用 array_unique 技巧。所以改变错字,这个答案可能是最好的。
【解决方案3】:

首先我认为,你需要获得数组长度,然后如果长度>或等于5,删除第一个元素,并将元素添加到数组的末尾。

if (!in_array($articleid, $lastviewedarticles)){
    $count = count($lastviewedarticles);
    if($count>=5)
        array_shift($lastviewedarticles);
    $lastviewedarticles[] = $articleid;
}

【讨论】:

    【解决方案4】:

    使用计数器访问数组,在每次调用中递增,并使用取模运算写入数组。如果您的计数器必须持续多次调用,您必须将其存储在会话变量或 cookie 中。

    假设 $i 持有你的计数器变量,这看起来像

    if (!in_array($articleid, $lastviewedarticles)){
       $lastviewedarticles[$i%5] = $articleid;
       $i++;
    }
    

    结果是一个原始的环形缓冲区,它将始终包含最后 5 个值。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多