これは Magento で$collection
、配列ではなく Iterator です。これは、次のような配列関数が機能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();
これは次のように変更できます (順序を逆にして 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
}