仅包含10个最新值的数组

时间:2016-12-02 12:44:15

标签: php arrays

我有一个包含多个元素的数组。我想只保留最近的10个值。所以我在循环中反转数组,检查元素是否在前10个范围内,如果没有,我从数组中取消设置元素。

唯一的问题是unset不起作用。我正在使用键来取消设置元素,但不知怎的,这不起作用。阵列不断增长。有什么想法吗?

$currentitem = rand(0,100);

$lastproducts = unserialize($_COOKIE['lastproducts']);
$count = 0;

foreach(array_reverse($lastproducts) as $key => $lastproduct) {

    if ($count <= 10) {
        echo "item[$key]: $lastproduct <BR>";       
    }

    else {
        echo "Too many elements. Unsetting item[$key] with value $lastproduct <BR>";
        unset($lastproducts[$key]);
    }

    $count = $count + 1;

}

array_push($lastproducts, $currentitem);

setcookie('lastproducts', serialize($lastproducts), time()+3600);

4 个答案:

答案 0 :(得分:0)

我认为选择最后10个更好的方法是:

$selection = array();
foreach(array_reverse($lastproducts) as $key => $lastproduct) {
  $selection[$key] = $lastproduct;
  if (count($selection)>=10) break;
}

最后,$selection将包含最后10个(或更少)的产品。

答案 1 :(得分:0)

您可以使用array_splice($input, $offset)功能。

$last_items_count = 10;
if(count($lastproducts) >= $last_items_count) {
    $lastproducts = array_splice($lastproducts, count($lastproducts) - $last_items_count);
}

var_dump($lastproducts);

我希望这段代码有所帮助。

有关详细信息,请参阅以下文档:

http://php.net/manual/en/function.array-splice.php

答案 2 :(得分:0)

我使用array_slice(http://php.net/array_slice)或许像:

$lastproducts = unserialize($_COOKIE['lastproducts']);
// add on the end ...
$lastproducts[] = $newproduct;
// start at -10 from the end, give me 10 at most 
$lastproducts = array_slice($lastproducts, -10); 
// ....

答案 3 :(得分:0)

使用array_splice和array_slice很好用,谢谢! :)

$lastproducts = unserialize($_COOKIE['lastproducts']);

// remove this product from array
$lastproducts = array_diff($lastproducts, array($productid));

// insert product on first position in array
array_splice($lastproducts, 0, 0, $productid);

// keep only first 15 products of array
$lastproducts = array_slice($lastproducts, 0, 15);