使用 Twig 创建数组

2022-08-30 14:28:10

我在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

答案 1

恐怕你不能在Twig中创建这样的数组。即使将新项追加到数组也很复杂,因为您需要为新元素创建一个数组并将其与现有数组连接起来。例:

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

我知道这看起来很糟糕,但所有这些不便都是故意的。Twig 旨在创建模板,因此可用于创建或处理信息的功能是有意限制的。这个想法是,大量的数据处理应该用PHP完成。


答案 2

另一种方式:

{% 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',
  }
}
%}

推荐