2012-05-15 33 views
2

使用Symfony2时,是否有任何方法可以在Twig模板中获取数值的平均值? 我试过类似如下的代码,但它不工作使用Twig模板时,有什么办法从数组中获得平均值?

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

任何想法?

回答

4

我想这应该这样做

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

假设rating.value是一个整数

+0

权的人!这是解决方案!所以** | length **过滤器仅应用于表达式** a/b **的最后一项(** b **)。太棒了,这不是在Twig文档里面解释的。非常感谢。 – JeanValjean

+2

长度过滤器只是一种获取数组大小的方法。在正确的地方使用PHP的count()是非常重要的。你不会做'$ avg = count($ sum/$ values);'对吗?你会这样做'$ avg = $ sum/count($ values);' –

4

没有内置的方式来做到这一点。创建自己的树枝扩展可以做到这一点很简单!您需要创建一个过滤器,该过滤器在烹饪手册中已得到很好的体现:How to write a custom Twig Extension

+0

我知道!我正在研究使用这种内置枝条功能的可能性。 – JeanValjean

1

答案是正确的,但可怕的使用,对吧?

很简单:

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 }}