web-dev-qa-db-ja.com

Twigで配列を作成する

私はこれをPHPで持っています:

$units = array();
foreach ($popPorts as $port) {
$units[$port->getFrameNo()][$port->getSlotNo()][$port->getPortNo()] = $port->getPortNo();
}

小枝で同じことをどのように達成できますか?

私はこれまでこれを試しました:

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

しかし、その後エラーが発生します:

値「[」の予期しないトークン「句読点」(「ステートメントブロックの終了」が必要)。

出力は次のようになります。

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
8
Jack Brummer

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

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

私はこれがひどいように見えることを知っていますが、この不便はすべて意図的に行われます。 Twigはテンプレートの作成を目的としているため、情報の作成または処理に使用できる機能は意図的に制限されています。アイデアは、PHPで大量のデータ処理を行う必要があるということです。

24
Javier Eguiluz

別の方法 :

{% set array = {
  'item-1': {
    'sub-item-1': 'my-sub-item-1',
    'sub-item-2': 'my-sub-item-2',
  },
  'item-2': {
    'sub-item-1': 'my-sub-item-1',
    'sub-item-2': 'my-sub-item-2',
  },
  'item-3': {
    'sub-item-1': 'my-sub-item-1',
    'sub-item-2': 'my-sub-item-2',
  }
}
%}
4
vincent