2012-05-15 36 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 }}