这是 Magento,$collection
不是数组而是迭代器。这意味着像这样的数组函数array_slice
不起作用,但是您可以像这样以相反的顺序模拟 foreach:
end($collection);
while($current = current($collection)) {
// ... (see below)
prev($collection);
}
在循环中,您将构建最后 5 个项目的数组并在拥有它们后中断:
$lastFive[] = $current;
if (count($lastFive) == 5) break;
编辑:现在我们已经解决了您的直接问题,让我们谈谈性能。从数据库中提取 11000 个项目到内存中,只使用其中的 5 个或 10 个,这是一个非常糟糕的主意。您应该找到$collection
加载的代码并从那里开始。它很可能是这样的:
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->setOrder('id', 'asc')->load();
这可以更改为(反向 ORDER,添加 LIMIT):
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->setOrder('id', 'desc')->setPageSize(5)->load();
瞧,只有最后 5 个项目被加载。
更好的是,您的代码看起来只需要 id,而不是实际模型,因此整个事情可以优化为:
$collection = Mage::getModel('catalog/product')->getCollection();
$ids = $collection->setOrder('id', 'desc')->setPageSize(5)->getAllIds();
foreach ($ids as $id) {
$product = Mage::getModel('catalog/product')->load($id);
// do what you want
}