使用 Symfony2 时,有没有办法在 Twig 模板中获取值数组的平均值?我尝试了类似于以下代码的东西,但它不起作用
{% set sumratings = 0 %}
{% set count = 0 %}
{% for rating in article.ratings %}
{% set sumratings = sumratings + rating.value %}
{% endfor %}
AVG: {{ sumratings / article.ratings.count }}
知道吗?
我认为这应该可以做到
{% set sumratings = 0 %}
{% for rating in article.ratings %}
{% set sumratings = sumratings + rating.value %}
{% endfor %}
AVG: {{ sumratings / article.ratings|length }}
假设rating.value
是整数
没有内置的方法可以做到这一点。创建自己的树枝扩展可以做到这一点很简单!你需要创建一个过滤器,这在食谱中得到了很好的说明:如何编写自定义Twig扩展。
答案是正确的,但使用起来很糟糕,对吧?
很简单:
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 }}
在现代 Twig 版本中,有一个reduce()
过滤器可以稍微简化这项工作:
{% set myValues = [1, 2, 3, 4, 5] %}
{% set average = (myValues | reduce((sum, val) => sum + val, 0)) / (myValues | length) %}
{{ average }} {# 3 #}
看到这个小提琴!