使用Twig模板时,有没有办法从数组中获取平均值?

时间:2012-05-15 16:42:39

标签: php arrays symfony twig average

使用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 个答案:

答案 0 :(得分:5)

我认为应该这样做

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

假设rating.value是一个整数

答案 1 :(得分:4)

没有内置的方法可以做到这一点。创建自己的枝条扩展可以做到这一点很简单!您需要创建一个过滤器,该过滤器在食谱中非常好用:How to write a custom Twig Extension

答案 2 :(得分: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 }}

答案 3 :(得分:0)

在现代Twig版本中,有一个reduce() filter可以简化这项工作,有点:

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

{{ average }} {# 3 #}

请参见this fiddle