使用Symfony2时,有没有办法在Twig模板内获取值数组的平均值? 我试过类似下面的代码,但它不起作用
{% set sumratings = 0 %}
{% set count = 0 %}
{% for rating in article.ratings %}
{% set sumratings = sumratings + rating.value %}
{% endfor %}
AVG: {{ sumratings / article.ratings.count }}
有什么想法吗?
答案 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!