这是Magento,
$collection
不是一个数组,而是一个迭代器。这意味着像
array_slice
这样的数组函数不起作用,但你可以模拟逆序的foreach操作来达到同样的效果:
end($collection);
while($current = current($collection)) {
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();
那可以修改为(倒序排列,添加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);
}