【问题标题】:Twig template - access array within arrayTwig 模板 - 访问数组内的数组
【发布时间】:2015-05-31 17:38:03
【问题描述】:

刚开始使用树枝模板,我遇到了一个问题。我有一个数组,我正在循环并从中提取数据,在这个数组中我有另一个我需要访问的数组(图像),问题是我似乎无法让它工作。

这是我的提要

0 => 
    array (size=8)
      'id' => int 1
      'url' => string 'http://localhost' (length=16)
      'image' => string '8cgbfenx2n1.png' (length=15)
      'type' => string 'image' (length=5)
  1 => 
    array (size=10)
      'id' => int 17
      'images' => 
        array (size=3)
          0 => string 'xjv5y4asev2.png' (length=15)
          1 => string 'kwwss8f6r34.gif' (length=15)
          2 => string '68yfnckk3c5.png' (length=15)
      'text' => string 'text' (length=4)
      'type' => string 'article' (length=7)

然后我像这样循环访问并访问

{%- if feed is not empty -%}
    {% for feedItems in feed %}

      <!-- article -->
      {% if feedItems.type == 'article' %}
            <!-- image -->
            <div class="gridTile-article-image">
              {% for image in feedItems.images %}
                {{ image }} <br />
              {% endfor %}
            </div>

      {% endif %}


    {% endfor %}
  {% endif %}

这不会抛出错误但也不会输出任何东西,任何人有任何想法必须实现这一点?

谢谢!

【问题讨论】:

  • 没有内循环可以工作吗?
  • 无需检查feed 是否为空。使用Twigfor 循环,您可以执行{% else %} No feed {% endfor %}
  • 是的,没有内部循环也可以正常工作,所以我可以返回数组中的内容,我只是无法访问该数组中的数组。啊,谢谢 D4V1D!

标签: php arrays symfony twig templating


【解决方案1】:

所以我找出了我缺少的东西。以下(原始)语法我工作得很好,但我犯了一个非常愚蠢的人为错误。

<div class="gridTile-article-image">
  {% for image in feedItems.images %}
    {{image}}
  {% endfor %}
</div>

返回空白的原因是因为我正在查询的提要中的图像数组实际上是空的!我正在查看一个已经填充的数组,但这不是“文章”类型,因此我在该块中的代码没有返回任何图像,因为没有任何图像!

感谢您的帮助!

【讨论】:

    【解决方案2】:

    看起来您正在尝试输出整个数组而不是其中一个索引。 feedItem.images 是一个数组,如下所示:

     1 => 
    array (size=10)
      'id' => int 17
      'images' => // The value of our index...
        array (size=3) // ..is an array
          0 => string 'xjv5y4asev2.png' (length=15)
          1 => string 'kwwss8f6r34.gif' (length=15)
          2 => string '68yfnckk3c5.png' (length=15)
      'text' => string 'text' (length=4)
      'type' => string 'article' (length=7)
    

    我的猜测是您必须在最里面的块中引用images 的索引。为此,正如这个答案所暗示的,使用 attribute 函数:
    Accessing array values using array key from Twig

    所以你的代码应该是这样的:

    {%- if feed is not empty -%}
    {% for feedItems in feed %}
    
      <!-- article -->
      {% if feedItems.type == 'article' %}
            <!-- image -->
            <div class="gridTile-article-image">
              {% for image in feedItems.images %}
                {{ attribute(image, 0) }} <br /> // Assuming you want to print "xjv5y4asev2.png"
              {% endfor %}
            </div>
    
      {% endif %}
    
    
    {% endfor %}
    {% endif %}  
    

    【讨论】:

    • 感谢 Kaloyan,我试过了,但它抛出错误“无法访问字符串变量 ("ws1c8e2y2n1.png") 上的属性 ("0")”我解决了我的问题,请参阅下面,感谢您的帮助!
    • 很高兴你解决了这个问题!另外,是的,在处理其他人的 API/提要(听起来像您的情况)时,请始终进行所有您能想到的检查,无论它们听起来多么愚蠢 :)
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多