我有一个包含多个元素的数组。我想只保留最近的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);
答案 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);
我希望这段代码有所帮助。
有关详细信息,请参阅以下文档:
答案 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);