我正在努力寻找一种方法来计算数组中的某些键,因此我不需要在 computed_twig 元素中键入所有键来进行某些计算。 我正在尝试获取表单中有多少键(问题),以便我可以在另一步中使用该数字。
问题是关键,每个问题都以
q_
开头。在这个例子中有 5 个问题(q_1 到 q_5)。这是我的表格示例(实际表格有很多组这样的问题,有几十个问题,所有问题都以q_
开头,然后是一个序列号,例如q_1
,...q_32
等)。我正在试用 this twigfiddle
这是我的网络表单 yaml 的最小示例:
qp1:
'#type': wizard_page
'#title': 'Part I'
'#open': true
ps1:
'#type': details
'#title': title...
'#required': true
'#attributes':
class:
- qp1_1
q_1:
'#type': radios
'#title': q1.....
'#options':
- 'option 1 with value 0'
- 'option 2 with value 1'
- 'option 3 with value 2'
- 'option 4 with value 3'
'#required': true
q_2:
'#type': radios
'#title': q2....
'#options':
- 'option 1 with value 0'
- 'option 2 with value 1'
- 'option 3 with value 2'
- 'option 4 with value 3'
'#required': true
q_3:
'#type': radios
'#title': q3.....
'#options':
- 'option 1 with value 0'
- 'option 2 with value 1'
- 'option 3 with value 2'
- 'option 4 with value 3'
'#required': true
q_4:
'#type': radios
'#title': q4.......
'#options':
- 'option 1 with value 0'
- 'option 2 with value 1'
- 'option 3 with value 2'
- 'option 4 with value 3'
'#required': true
q_5:
'#type': radios
'#title': q5........
'#options':
- 'option 1 with value 0'
- 'option 2 with value 1'
- 'option 3 with value 2'
- 'option 4 with value 3'
'#required': true
首先,我尝试了这个,但它返回了所有正确的键,而我只想要它们的数量(即本例中的
5
):
{% for qs in qp1.ps1|keys %}
{% if qs starts with 'q_' %}
{{ qs }} {# this returns q_1 q_2 q_3 q_4 q_5 #}
{% endif %}
{% endfor %}
第二,这给了我尽可能多的“3”,因为
q_
键和 33333
一样正确,但这不是我想要的,我不明白 3
来自哪里!
{% for qs in qp1.ps1|keys %}
{% if qs starts with 'q_' %}
{{ qs | length }} {# this returns 3 3 3 3 3 (number "3" 5 times !) #}
{% endif %}
{% endfor %}
我终于为我的案例找到了一个简短而清晰的答案,但我仍然有兴趣了解任何其他解决方案,而无需使用非相关键的数量。下面的树枝工作得很好。数字“4”是元素
q_
下的非ps1
键的数量。
((qp1.ps1)|length)
返回所有键的数量(本例中为 9)。我要计算的键只是以q_
开头的键,在此示例表单中它们是5个键。所以我只是减去non q_
keys (#type
, #title
, #required
, #attributes
) 的数量如下:
{{ ((qp1.ps1)|length) - 4 }}
我仍然更喜欢一种无需使用非相关键数的方法,尤其是。如果为了学习而使用“开始于”过滤器,并且避免每次非相关键的数量可能发生变化时都必须更新树枝。