PHP foreach循环跳过前3项

时间:2016-07-29 08:12:40

标签: php loops magento foreach skip

我有6个产品的列表,我希望将它们分成2个彼此相邻的3个产品列表。该列表在foreach循环中进行,第一个列表在count == 2之后停止,因此将显示3个项目。第二个列表应从第四个项目开始。我怎样才能做到这一点?

这是wat第一个列出的3个项目:

<?php
    $_categoryId = explode(' ', $category['id']);
    $count = 0;
    $_productCollection = Mage::getModel('catalog/category')->load($_categoryId)
        ->getProductCollection()
        ->addAttributeToSelect('*')
        ->setOrder('date_added', 'DESC');
?>
<?php foreach ($_productCollection as $_product): ?>
    <li class="category-row-list-item">
        <a class="product-name" href="<?php echo $_product->getProductUrl() ?>">
            <?php echo $this->htmlEscape($_product->getName()) ?>
        </a>
    </li>
<?php
    if($count == 2) break; // Stop after 3 items
    $count++;
?>
<?php endforeach ?>

祝你好运, 罗伯特

2 个答案:

答案 0 :(得分:0)

类似于模数函数的东西,每3个项目都有一个新数组:

$count = 1;
$count_change = 1;
$key = 0;
$yourList = array(
  "1",
  "2",
  "3",
  "4",
  "5",
  "6"
 );
foreach($yourList as $item)
{
if(!isset($$new_list))
{
  $new_list = "list".$count_change."";
  $$new_list = array();
}
if($count % 3 == 0)
{
  $key = 0;
  $count_change++;
  $new_list = "list".$count_change."";
  $$new_list = array();
}
$$new_list[$key] = $item;
$count++;
$key++;
}

希望这会有所帮助。

答案 1 :(得分:0)

为简单起见,您可以重复foreach语句,但在前三项中执行相反的操作并continue

<?php foreach ($_productCollection as $_product): ?>
<?php
    $count++; // Note that first iteration is $count = 1 not 0 here.
    if($count <= 3) continue; // Skip the iteration unless 4th or above.
?>
<li class="category-row-list-item">
    <a class="product-name" href="<?php echo $_product->getProductUrl() ?>">
        <?php echo $this->htmlEscape($_product->getName()) ?>
    </a>
</li>
<?php endforeach ?>

循环中使用关键字continue来跳过当前迭代而不退出循环,在这种情况下,它使PHP直接返回到foreach语句的第一行,从而增加了计数器在传递if语句之前,到4(因为第4,第5和第6是我们之后的事情)。

对方法的评论

我保持与现有解决方案的一致性,但在这种情况下更简洁的方法可能是使用内置的Collection Pagination。

如果您使用->setPageSize(3),您只需迭代该集合即可获得前三个产品,然后使用->setCurPage(2)获取三个项目的第二页。

我在这里链接this blog post这个主题只是为了给你一个如何使用它的例子,但因为我不知道你在使用我收藏的藏品时的舒适程度我的第一个答案基于您现有的代码。