Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 细枝动态变量分配_Php_Json_Symfony_Variables_Twig - Fatal编程技术网

Php 细枝动态变量分配

Php 细枝动态变量分配,php,json,symfony,variables,twig,Php,Json,Symfony,Variables,Twig,我试图在循环内的细枝中动态分配变量。例如,这是传递到模板中的JSON: [{ "name": "firstName", "value": "Adam", }, { "name": "Lastname", "value": "Human", }] 值得注意的是,我没有能力修改这个JSON格式,因为它来自第三方,所以我需要在模板方面解决这个问题 我想循环使用这个json并为每个对象创建变量,如下所示: {% for item in json %} {% set

我试图在循环内的细枝中动态分配变量。例如,这是传递到模板中的JSON:

[{
   "name": "firstName",
   "value": "Adam",
 },
 {
   "name": "Lastname",
   "value": "Human",
 }]
值得注意的是,我没有能力修改这个JSON格式,因为它来自第三方,所以我需要在模板方面解决这个问题

我想循环使用这个json并为每个对象创建变量,如下所示:

{% for item in json %}
    {% set {{item.name}} = item.value %}
{% endfor %}
挑战在于,当我想将值分配给一个计算变量名时,Twig假设我正在为一个文本分配一个值。这样我就可以像{{firstName}}一样引用数组中的每个项,并在模板中返回“Adam”

我尝试了许多不同的方法来强制Twig动态创建变量数组,例如:

{%set(item.name)=item.value%}

没有运气


关于动态创建变量有什么想法吗?这在大多数编程语言中都是直截了当的,因此我很难理解在像Twig这样的模板引擎中是如何处理这一点的。

如果值实际上是可迭代的,而不是单个json字符串,那么可以将它们放入如下数组中:

{% set values = [] %}
{% for item in json %}
    {% set values = values|merge({(item.name): item.value}) %}
{% endfor %}
然后可以使用
值。firstName


如果它是一个json字符串,因此不能像这样循环。您需要在twig中编写一个基本的字符串解析器。然而,我上周在《华尔街日报》上写了类似的文章。一般来说,这是一个非常糟糕的主意,因为它在很多情况下都会失败。

请在控制器中执行。当发送到视图时,您应该准备好数据。@nerdlyist这不是一个选项。JSON由我无法控制的第三方传递给我。因此问题就来了。这并不排除您在将其发送到twig之前对其进行操作,除非您只允许访问模板文件。@JennevanderMeer我们在电子邮件发送提供商中使用twig进行动态脚本编写。所以在API调用和模板之间没有控制器。谢谢,我来试一试。我尝试了类似的方法,但它是通过初始化一个空对象而不是数组来实现的。我会让你知道它是否有效!
{% set values = [] %}
{% for item in json %}
    {% set values = values|merge({(item.name): item.value}) %}
{% endfor %}