Twig忘记了数组键

9

我在Symfony2中使用twig遇到了一个奇怪的问题。我正在使用以下数组:

[days] => Array
    (
        [1] => Array
            (
                [money] => 9
            )

        [2] => Array
            (
                [money] => 21
            )

        [3] => Array
            (
                [money] => 38
            )

        [4] => Array
            (
                [money] => 6
            )

        [18] => Array
            (
                [money] => 6
            )

        [19] => Array
            (
                [money] => 3
            )

        [31] => Array
            (
                [money] => 11
            )

    )

为了测试这个,我使用了以下代码。
{% for key in days %}
  {{ key }}<br>
{% endfor %}

但输出结果如下所示。
0
1
2
3
4
5
6

但它应该看起来像这样

1
2
3
4
18
19
31

看起来twig创建了一个带有新索引的新数组。有没有办法从数组中获取正确的索引?

使用php中的var_dump($days),我可以看到正确的索引,所以这个“问题”与twig有关。


嗨igorw,我不需要金钱价值,我需要父数组中的键。 - mrohnstock
1
尝试使用 {% debug days %},我打赌这是Twig中的值(array_valuesarray_shift等)。很有可能是某些东西正在重新索引数组。你展示的第一个值是传递给 $twig_env->render($days) 的吗? - Kendall Hopkins
@KendallHopkins:问题已经得到解决。它不是关于twig的,而是doctrine-mongodb中已知的漏洞。 - mrohnstock
这与Twig无关,而是Doctrine-MongoDB中使用嵌入式文档时已知的缺陷。 Doctrine无法处理来自嵌入式文档的键值对,它将重新排序从0开始的键,并因此忽略正确的键值对。 无论如何,还是非常感谢您的帮助 :)。 - mrohnstock
@Monty 请确保回答问题并接受答案。 - Kendall Hopkins
3个回答

15

8

也许这个

http://www.twig-project.org/doc/templates.html

默认情况下,循环迭代顺序的值。您可以使用keys筛选器在键上进行迭代:

<h1>Members</h1>
<ul>
  {% for key in users|keys %}
    <li>{{ key }}</li>
  {% endfor %}
</ul>

谢谢你的回答,使用|keys仍然存在相同的问题... :( - mrohnstock
@Monty,我尝试模拟你的设置,并且这个解决方案对我有效(顺便说一句,{{ key }}根本不起作用)...你能把你在操作中使用的代码也贴出来吗? - Problematic
嗨,Problematic,我在github/twig上发布了整个代码:https://github.com/fabpot/Twig/issues/347。我忘记了for循环中的第二个值,正如azat所想象的那样,但它也不起作用。 - mrohnstock

6

这与twig无关,而是doctrine-mongodb在使用embeddedDocuments时已知的缺陷。Doctrine无法处理来自embeddedDocuments的键值,它将从0开始重新排序键,并因此忽略正确的键值。无论如何,感谢您的帮助:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接