2

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

4 に答える 4

5

私はこれがそれをするべきだと思います

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

rating.value整数であると仮定する

于 2012-05-15T18:55:56.710 に答える
4

これを行うための組み込みの方法はありません。それを実行できる独自の小枝エクステンションを作成するのは簡単です!クックブックで非常によく説明されているフィルターを作成する必要があります:カスタムTwig拡張機能の作成方法

于 2012-05-15T18:56:37.787 に答える
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'));

これで、Twigテンプレートで次のように実行できます。

{{ somearray | arrayAverage }}
{{ somearray | arrayAverage | number_format }}
于 2017-09-20T04:50:28.957 に答える
1

最新のTwigバージョンには、この作業を少し簡素化できるreduce()フィルターがあります。

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

{{ average }} {# 3 #}

このフィドルを見てください!

于 2020-02-03T04:44:34.757 に答える