我在数组中 11000 项,我想显示仅最后 5或10 项目
$i = 0;
foreach ($collection as $product_all) {
if($i==2) break;
echo $product_all->getId();
$neew = Mage::getModel('catalog/product')->load($product_all->getId());
echo'<pre>';
print_r($neew);
$i++;
}
有了这个我有第一个 2个项目,我怎么才能得到最后一个项目
答案 0 :(得分:3)
这是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();
Voilà,只有最后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
}
答案 1 :(得分:1)
查看http://php.net/manual/en/function.array-slice.php
$items = array_slice($items, -5);
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用array_slice
$last = array_slice($collection, -5);
答案 4 :(得分:0)
使用您的代码示例...
$i = 0;
$no = count($collection);
foreach ($collection as $product_all) {
if($i >= ($no-10)) {
echo $product_all->getId();
$neew = Mage::getModel('catalog/product')->load($product_all->getId());
echo'<pre>';
print_r($neew);
}
$i++;
}
答案 5 :(得分:0)
如果您想要最后X
项:
$i = 0;
$totalCount = count($collection);
$itemsCount = 5;
$x = $totalCount - $itemsCount;
foreach ($collection as $product_all) {
if ($i < $x) {
$i++;
continue;
}
echo $product_all->getId();
$neew = Mage::getModel('catalog/product')->load($product_all->getId());
echo'<pre>';
print_r($neew);
$i++;
}
如果您只想要使用的最后一个:
$lastItem = $collection->getLastItem();
但最好的解决方案是根据我的要求对您的收藏进行排序和限制。如果您只想使用5或10个产品,为什么要提取11000多种产品(!)?如果您在没有任何排序的情况下获得产品,那么按我记得的那样,它们按created_at
属性排序。您只需按降序排序并限制为X
。
答案 6 :(得分:0)
试试这个
<?php
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
function foreach_last($array, $n, $func) {
reset($array);
end($array);
$i = 0;
$n = min($n, count($array)) - 1;
while ( $i ++ < $n )
prev($array);
$func(current($array), key($array));
while ( $v = next($array) ) {
$func($v, key($array));
}
}
function print_e($v, $k) {
printf("k: %s, v: %s\n", $k, $v);
}
foreach_last($array, 5, 'print_e');