我在单独的会话变量中有两个独立的数组,其中包含其他数组。我试图根据另一个输出的值取出数组的一个属性。它本质上是状态代码(具有其他属性)和其他属性中的字典。
他们看起来像这样:
字典数组
%array% [ { Id: '22', Name: 'Foo', Type: 'FooFoo', Description: 'More Foo', Enabled: 'true', Priority: 'number here' },
{ Id: '23', Name: 'Bar', Type: BarBar, Description: 'oh look more bars', Enabled: 'true', Priority: 'number here' },{...}]
和
状态数组:
%array% [{ Id: '54', Name: 'Name goes here', Status: '23', BrandName: 'Brand'}],{...} }]
我想做的是像
{%for Id in app.session.get('statusArray')%}
{% if Id.Status in app.session.get('dictionaryArray')%}
{{app.session.get('dictionaryArray').Name}}
{% endif %}
{%endfor%}
我也试过
{{attribute(app.session.get('dictionaryArray').Name, Id.Status)}}
或者那种效果。
TL; DR
我需要根据状态数组给出的'Status:'从Dictionary Array中取出Name
答案 0 :(得分:1)
好的,所以你在这段代码中遇到很多问题。让我们从数据开始。
您提供的数据似乎是JSON数组的形式,而不是PHP数组。因此,您必须先使用json_decode
解码它们。
但那些数组不是valid JSON。为了使它们成为有效的JSON,每个键和值都需要在它们周围加上双引号,即"Id": "54"
而不是Id: '54'
。
然后,你必须使用$this->getRequest()->getSession()->set('statusArray', $statusArray);
将这些变量设置到会话中,我认为你做得很好。
接下来,您的twig模板的逻辑不正确。由于外部数组中有多个关联数组,因此for循环中的每个项都是与括号{}中括起的JSON对象对应的关联数组之一。
将完成您想要的代码如下:
{% for status in app.session.get('statusArray') %}
{% for dict in app.session.get('dictionaryArray') %}
{% if status.Status == dict.Id %}
{{ dict.Name }}
{% endif %}
{% endfor %}
{% endfor %}
答案 1 :(得分:0)
我发现这个工作......
在php文件中:
$session = $this->get('session');
$session->set('user',array(
'nickname' => 'Joe'
));
在树枝模板中:
<p>{{ app.session.get('user')['nickname'] }}</p>
HOWEVER 如果密钥不存在,则会抛出异常。