TWIG,Symfony2:根据另一个数组的值访问一个数组中的值

时间:2012-10-03 16:21:50

标签: php arrays symfony twig

我在单独的会话变量中有两个独立的数组,其中包含其他数组。我试图根据另一个输出的值取出数组的一个属性。它本质上是状态代码(具有其他属性)和其他属性中的字典。

他们看起来像这样:

字典数组

%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

2 个答案:

答案 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 如果密钥不存在,则会抛出异常。