2

使用 Symfony2 时,有什么方法可以在 Twig 模板内获取值数组的平均值?我尝试了类似以下代码的方法,但它不起作用

{% set sumratings = 0 %}
{% set count = 0 %}
{% for rating in article.ratings %}
  {% set sumratings = sumratings + rating.value %}
{% endfor %}
AVG: {{  sumratings / article.ratings.count  }}

任何想法?

4

4 回答 4

5

我认为这应该这样做

{% set sumratings = 0 %}
{% for rating in article.ratings %}
  {% set sumratings = sumratings + rating.value %}
{% endfor %}
AVG: {{  sumratings / article.ratings|length }}

假设rating.value是一个整数

于 2012-05-15T18:55:56.710 回答
4

没有内置的方法可以做到这一点。创建自己的树枝扩展可以做到这一点很简单!您需要创建一个过滤器,这在食谱中有很好的记载:如何编写自定义 Twig 扩展

于 2012-05-15T18:56:37.787 回答
2

答案是正确的,但使用起来很糟糕,对吧?

这很简单:

    function arrayAverage($array)
    {
        if (!is_array($array)) return false;
        if (!count($array)) return 0;
        $avg=0;
        foreach ($array as $num) $avg+=$num;
        $avg/=count($array);
        return $avg;
    }


$twig->addFilter('arrayAverage', new Twig_Filter_Function('arrayAverage'));

现在你可以在你的树枝模板中这样做:

{{ somearray | arrayAverage }}
{{ somearray | arrayAverage | number_format }}
于 2017-09-20T04:50:28.957 回答
1

在现代 Twig 版本中,有一个reduce()过滤器可以稍微简化这项工作:

{% set myValues = [1, 2, 3, 4, 5] %}
{% set average = (myValues | reduce((sum, val) => sum + val, 0)) / (myValues | length) %}

{{ average }} {# 3 #}

这个小提琴

于 2020-02-03T04:44:34.757 回答