如何只获取树枝中有多少个特定键(开头)的数字

问题描述 投票:0回答:2

我正在努力寻找一种方法来计算数组中的某些键,因此我不需要在 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 %}
twig
2个回答
0
投票

我终于为我的案例找到了一个简短而清晰的答案,但我仍然有兴趣了解任何其他解决方案,而无需使用非相关键的数量。下面的树枝工作得很好。数字“4”是元素

q_
下的非
ps1
键的数量。
((qp1.ps1)|length)
返回所有键的数量(本例中为 9)。我要计算的键只是以
q_
开头的键,在此示例表单中它们是5个键。所以我只是减去non
q_
keys (
#type
,
#title
,
#required
,
#attributes
) 的数量如下:

{{ ((qp1.ps1)|length) - 4 }}

我仍然更喜欢一种无需使用非相关键数的方法,尤其是。如果为了学习而使用“开始于”过滤器,并且避免每次非相关键的数量可能发生变化时都必须更新树枝。


0
投票

更干净的解决方案是使用过滤器

filter

{{ qp1.ps1|filter((v,k) => k starts with 'q_')|length }}

如果需要,您也可以将过滤后的结果分配给变量,例如

{% set questions = qp1.ps1|filter((v,k) => k starts with 'q_') %}
{{ questions | length }}

演示

© www.soinside.com 2019 - 2024. All rights reserved.