PHP цикл foreach пропустить первые 3 элемента

У меня есть список из 6 продуктов, которые я хочу разделить на 2 списка из 3 продуктов рядом друг с другом. Список составляется в цикле foreach, первый список останавливается после счетчика == 2, поэтому будут отображаться 3 элемента. Второй список должен начинаться с четвертого пункта. Как я могу достичь этого?

Это Ват делает первый список из 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 ?>

С наилучшими пожеланиями,
Роберт

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, таким образом увеличивая счетчик до 4 (с 4-го, 5-го и 6-го — то, что мы ищем) перед передачей if заявление.

Комментарий к подходу

Я сохранил его в соответствии с вашим существующим решением, но в этом случае более понятным вариантом, вероятно, было бы использование встроенной коллекции нумерации страниц.

Если вы используете ->setPageSize(3) Вы можете просто повторить коллекцию, чтобы получить первые три продукта, а затем использовать ->setCurPage(2) чтобы получить вторую страницу из трех предметов.

Я связываю этот блог на тему здесь, просто чтобы дать вам пример того, как он используется, но так как я не знаю ваш уровень комфорта при работе с коллекциями, я сохраняю свой первый ответ на основе вашего существующего кода.

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++;
}

Надеюсь это поможет.

0

По вопросам рекламы [email protected]