Массив PHP в ветке

У меня есть этот код на php, я преобразовал его в веточку, но не получил того же результата.

 <?php for($j=0;$j<sizeof($products[$category]);) { ?>
   <div class = "wrapper">
       <?php for($f=0;$f<$rows;$f++,$j++) { 
                if ($j<sizeof($products[$category])) { ?>
                    <?php if ($products[$category][$j]) { ?>

                    <?php } 
                     if (sizeof($products[$category])<(4*$rows)-1){
                       if (((sizeof($products[$category])-($j)) + 1)%3 == 0){
                              $cnt = 1;
                                }
                                if ($cnt == 1){
                                        $f++;
                                }
                            }
                        ?>
                        <?php } ?>
                        <?php } ?>
                    </div>

в файле ветки:

{% for j in 0..(products[category]|length)-1 %}
    <div class = "wrapper">
          {% for f in 0..rows-1 %}
                {% if j < products[category]|length %}
                    {% if products[category][j] %}

                    {% endif %} 
                    {% if products[category]|length < ((4*rows)-1) %} 
                        {% if (((products[category]|length)-(j)) + 1)%rows == 0 %}
                                    {% set cnt = 1 %}
                        {% endif %}
                        {% if cnt == 1 %}
                                {% set f = f + 1 %}
                        {% endif %}
                    {% endif %}
                 {% endif %}
            {% set j = j + 1 %}
           {% endfor %}  

    </div>

Как я могу реализовать $j++ с итерацией цикла f?

Пожалуйста помоги.

Заранее спасибо.

вы можете сделать {% set loop.parent.loop.index = loop.parent.loop.index + 1%} в ветке?

Mantis Support 28.04.2018 12:28

@MantisSupport, спасибо, но я вас не понял. Не могли бы вы написать в соответствии с моими переменными кода?

Radhika 28.04.2018 12:34

Не можете просто выполнить {% set j = j + 1%} во втором цикле? @mantis Я очень надеюсь, что вы не можете изменить переменную цикла

DarkBee 28.04.2018 12:41

Я сделал это, но моя проблема в том, что когда f = rows-1, f for loop будет отброшен, а управление перейдет к j for loop, тем временем, когда управление перейдет к j for loop, я хочу увеличить j ++, чего нельзя достичь, написав {% set j = j + 1%} в цикле f for, поскольку он не будет выполняться.

Radhika 28.04.2018 12:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
422
2

Ответы 2

Попробуйте, это сработает для вас

<div class = "wrapper">
{% set j = 0 %}
{% for f in 0..rows-1 %}
    {% if j < products[category]|length %}
        {% if products[category][j] %}

        {% endif %} 
        {% if products[category]|length < ((4*rows)-1) %}
            {% if (((products[category]|length)-(j)) + 1)%rows == 0 %}
                {% set cnt = 1 %}
            {% endif %}
            {% if cnt == 1 %}
                {% set f = f + 1 %}
            {% endif %}
        {% endif %}
    {% endif %} 
    {% if f < rows %}
        {% set j = j + 1 %}
    {% endif %}
{% endfor %}
</div>

@Prashant, я пробовал это, но с моим PHP-кодом я получил результат как 1 3 5 2 4, но с веточкой я получил результат как 1 2 3 4 5 2 3 4 5, поэтому в цикле f for он увеличивает j при переходе к родительскому цикл при проверке условий f для цикла, как в php

Radhika 28.04.2018 13:26

if (((sizeof ($ products [$ category]) - ($ j)) + 1)% 3 == 0) {это отличается от кода ветки и php, вот в чем проблема?

Prashant 28.04.2018 14:21

Нет, проблема не в этом. Я просто использовал переменную вместо 4 в веточке

Radhika 28.04.2018 14:24

Позвольте нам продолжить обсуждение в чате.

Prashant 28.04.2018 14:25

Написание кода ниже, основанного на желаемом выходе.

Нравится - Всего строк 2, элементов 6, затем

1  3  5
2  4  6

Строки по 3 и элементы по 8, тогда

1  4  7
2  5  8
3  6

Предполагая, что twig follow - массив индексов с нулевым отсчетом

{% set TOTALITEMS = (products[category]|length) %}
{% set TOTALROWS = 2 %}
{% set ITEMSPERROW = TOTALITEMS / TOTALROWS %} <!-- make sure you get integer number only, if not then make it by helper functions of php / twig -->

{% for rowIndex in 0 .. TOTALROWS - 1 %}
  <!-- start a div which will contain a row -->

    {% for columnIndex in 0 .. ITEMSPERROW - 1 %}

        <!-- here you have a item ready to dump in html -->
        {%  products[category][ (columnIndex * TOTALROWS) + rowIndex ]  %}

    {% endfor %} <!-- end of loop for columnIndex ...-->

  <!-- end a div which contained a row -->
{% endfor %} <!-- end of loop for rowIndex ...-->

Другие вопросы по теме