如何让Twig中的员工排班循环完成一轮后重复执行?
嘿,我来帮你搞定这个Twig循环的重复问题!先理清楚你要的效果:每个员工对应的X位置要按相同规律重复,第一轮从3到13(对应索引2到12),第二轮从14开始(索引13),每个员工的X位置在上一轮的基础上加上员工总数,对吧?
原代码里用multiplier乘法的逻辑其实不太符合这个需求——它会让后续的X位置间隔越来越大,而你需要的是固定间隔(等于员工数)的重复排列。咱们换个更简洁的逻辑,用模运算来实现这个重复规律:
修改后的Twig代码
{% if employees %} {% set employee_count = employees|length %} {% set start_index = 2 %} {# 对应第3列,因为Twig循环索引从0开始 #} {% for employeeIndex, employee in employees %} <tr> <td>{{ employee.werknemers }}</td> {% for workdayIndex, workday in workdays %} {% if workdayIndex >= start_index and (workdayIndex - start_index) % employee_count == employeeIndex %} <td>x</td> {% else %} <td></td> {% endif %} {% endfor %} </tr> {% endfor %} {% endif %}
逻辑解释
- 预定义变量:先算出员工总数
employee_count(避免重复计算),再定义start_index为2——因为你说第一个X从第3列开始,而Twig的循环索引是从0开始的,所以第3列对应索引2。 - 重复规律判断:
workdayIndex >= start_index:确保只从第3列开始画X(workdayIndex - start_index) % employee_count == employeeIndex:这是核心逻辑——把当前工作日索引减去起始索引后,对员工总数取模,如果等于当前员工的索引,就画X。这样每过employee_count个工作日,规律就会重复一次,完美实现你要的“从14开始按相同规律向下排列”的效果。
举个例子:假设员工总数是11(3到13刚好11个位置),那第14列对应索引13,(13-2)%11=11%11=0,对应第一个员工的X;第15列索引14,(14-2)%11=12%11=1,对应第二个员工的X,以此类推,完全符合你的需求。
如果之后需要调整起始位置或者限制轮数,只需要修改start_index或者在判断条件里加额外的限制(比如(workdayIndex - start_index) // employee_count < 3来限制最多3轮)就行。
内容的提问来源于stack exchange,提问作者Gago
相关产品推荐
相关产品推荐

