如何通过Twig中的键访问值而无需for循环

时间:2019-06-14 16:53:22

标签: php twig

我正在使用由GraphQL驱动的数据源。它返回参数的键值对的数组,其中参数的名称为键。不幸的是,它被设置为对象数组。例如:

"parameters": [
  {
    "key": "property.domain",
    "value": "informium.net"
  },
  {
    "key": "facebooook.url",
    "value": "https://www.facebooook.com/informium"
  },
  {
    "key": "springoh.url",
    "value": "https://greenrivervalley.fffo.com/list-widget.js"
  },
  {
    "key": "guitar.applicationId",
    "value": "fHpJN0dfgdfrjjvE"
  },
  {
    "key": "property.phone",
    "value": "(707) 735-7311"
  }
]

PHP / Twig中是否有一种方法可以通过键访问值,而无需每次需要查找时都遍历此数组?我希望能够通过仅提供键来获取参数的值。例如:

{% set propDomain = data.parameters["property.domain"] %}

2 个答案:

答案 0 :(得分:1)

我想出了如何使用Merge()函数在Twig中对数组进行预处理:

{% set parametersHash = [] %}
{% for parameter in data.resolution.section.parameters %}
  {% set parametersHash = parametersHash|merge({(parameter.key): parameter.value}) %}
{% endfor %}

这使我可以像这样通过键访问各个参数:

{{ parametersHash["guitar.applicationId"] }}

产生:

fHpJN0dfgdfrjjvE

答案 1 :(得分:0)

并非没有预处理。

您可以按照以下步骤对数据进行预处理以使其成为关联数组

$out_params = {};

foreach ($param in $parameters) {
  $key = $param["key"];
  $value = $param["value"];
  $out_params[ $key ] = $value;
}

然后您可以使用out_params["my-key"]直接访问这些值。

这种方法当然假设每个键都是唯一的。如果不是,则属于键的最后一个值将出现在展平的数组中。