2017-03-29 24 views
2

持つ配列を作成しますか?私はPHPでこれを持っている小枝

私はこれまでのところ、これを試してみました:

{% set frames = [] %} 
{% for row in object.popPorts %} 
    {% set frames[row.frameNo][row.slotNo][row.portNo] = row.portNo %} 
{% endfor %} 
{{ dump(frames) }} 

をしかし、私はエラーを取得する:

Unexpected token "punctuation" of value "[" ("end of statement block" expected).

出力は次のようにする必要があります:

array (size=3) 
    (frame) 1 => 
    array (size=2) 
     (slot) 1 => 
     array (size=4) 
      0 => (port) 26 
      1 => (port) 27 
      2 => (port) 28 
      3 => (port) 29 
     (slot) 5 => 
     array (size=2) 
      0 => (port) 31 
      1 => (port) 34 
    (frame) 2 => 
    array (size=1) 
     (slot) 3 => 
     array (size=1) 
      0 => (port) 32 
    (frame) 3 => 
    array (size=1) 
     (slot) 6 => 
     array (size=1) 
      0 => (port) 33 
+0

あなたはあなたの$単位の例を教えていただけますか?なぜなら、私は "行"に "frameNo"という名前のキーがないということができるからです。 –

+1

これを小枝で行うのはおそらく迷惑でしょう。動的値をキーとして使用するには[attribute](http://twig.sensiolabs.org/doc/2.x/functions/attribute.html)を使用できますが、ネストされた構造でどのように動作するかはわかりません。私はタイプの変換は、あなたのコードではなく、あなたのテンプレートでTransformer/Converterクラスで行う必要があるロジックだと主張します。 – dbrumann

+0

あなたはそれをtwigですることはできません。たとえば、 'merge()'が必要です。しかし、それは可能ですが、たくさんの醜いコードにつながります(キーの一時変数が必要です...)。あなたがPHPでそれを行い、結果を小枝に送ることができるなら、代わりにそれをお勧めします。 – jeroen

答えて

4

私は怖いですTwigのような配列を作成することはできません。配列に新しい項目を追加することは、新しい要素の配列を作成して既存の配列と連結する必要があるため、複雑です。例:

{% set array = [] %} 
{% for item in items %} 
    {% set array = array|merge([{ title: item.title, ... }]) %} 
{% endfor %} 

私はこれがひどいように見えますが、このすべての不便は意図的に行われています。 Twigはテンプレートを作成することを目的としているため、情報の作成や処理に利用できる機能は制限されています。その考え方は、PHPで重いデータ処理を行うべきだということです。

+0

私は完全に理解しています。ありがとうございました。私はこれをPHPで処理できますが、エンティティの1つのショーテンプレートにこれを追加するだけで、Sonata Admin Bundleを大幅にオーバーライドする必要があります。とにかく、私はそれをチェックします。ありがとう –

関連する問題