树枝比较运算符表现不佳

时间:2018-01-02 08:12:13

标签: php symfony twig

如果使用symfony的twig模板引擎满足给定条件,我试图将某个类添加到锚元素中,以下代码片段用于尝试实现此目的:

{% if colors is defined and colors is not empty %}
{% for keys, c in colors %}
<li>
   <a id="{{ keys }}" data-rel="tooltip" data-placement="top" title="{{ c.color|capitalize }}" class="picker-btn{{ (colorData[keys] is defined and colorData[keys]['code'] == c.hexcode) ? ' selected':'' }}" style="background: {{ c.hexcode }}" data-color-id="{{ c.id }}" data-color-text="{{ c.color }}" data-color-code="{{ c.hexcode }}"></a>
</li>
{% endfor %}
{% endif %}

上面的代码正确地将selected类添加到第一个锚元素中,即使我期望为此类分配3个锚元素:

{% if colors is defined and colors is not empty %}
{% for keys, c in colors %}
<li>
   <a id="{{ keys }}" data-rel="tooltip" data-placement="top" title="{{ c.color|capitalize }}" class="picker-btn{{ (colorData[keys] is defined and colorData[keys]['code'] in colors | keys) ? ' selected':'' }}" style="background: {{ c.hexcode }}" data-color-id="{{ c.id }}" data-color-text="{{ c.color }}" data-color-code="{{ c.hexcode }}"></a>
</li>
{% endfor %}
{% endif %}

第二个代码片段将selected类添加到3个锚元素,因为无论您希望查看它,colorData[keys]['code']都有colors数组中存在的键,即使该类不是& #39; t被添加到正确的锚元素中。我的问题是这个;如果comparison operator (==)为匹配的变量值返回true,为什么第一个代码片段不起作用?为什么第二个代码片段将这个类添加到错误的锚元素中?

colorData数组的快照如下所示: enter image description here

colors数组的那个是:

enter image description here

2 个答案:

答案 0 :(得分:3)

关于第一个例子,您需要进行比较:

  1. &#34;#FFFFFF&#34; ==&#34; #FFFFFF&#34;
  2. &#34;#222222&#34; ==&#34;#795548&#34;
  3. &#34;#01579b&#34; ==&#34;#3e2723&#34;
  4. 在此比较之后,它在colorData[keys] is defined条件下完成了3次。你在这里可以做的是再添加一个循环。

    {% if colors is defined and colors is not empty %}
    {% for keys, c in colors %}
    <li>
       {% set isColorInColorData = false %}
       {% for exactColor in colorData %}
            {% if exactColor.code == c.hexcode %}
                 {% set isColorInColorData = true %}
            {% endif %}                
       {% endfor %}
    
       <a id="{{ keys }}" data-rel="tooltip" data-placement="top" title="{{ c.color|capitalize }}" class="picker-btn{{ isColorInColorData ? ' selected':'' }}" style="background: {{ c.hexcode }}" data-color-id="{{ c.id }}" data-color-text="{{ c.color }}" data-color-code="{{ c.hexcode }}"></a>
    </li>
    {% endfor %}
    {% endif %}
    

    查看第二个示例,您需要将字符串与整数进行比较。

    1. &#34;#FFFFFF&#34;在[0,1,2]
    2. &#34;#222222&#34;在[0,1,2]
    3. &#34;#01579b&#34;在[0,1,2]
    4. 请注意&#34; #FFFFFF&#34;在PHP !!中等于&#34;(==)为0 !!

      所以你必须真正专注于你比较的东西。在树枝中没有===运算符。

答案 1 :(得分:1)

使用第一个代码,您说

colorData[keys] is defined and colorData[keys]['code'] == c.hexcode

当你循环遍历3个项目的数组时,keys将是0,1,2(或者假设是1,2,3,因为它是Twig)。所以你要说

colorData[0]['code'] == c.hexcode

即。将colorData [0]与colors [0]进行比较,将#FFFFFF == #FFFFFF与它进行比较。

第二次迭代,然后你将colorData [1]与颜色[1]进行比较,#795548 ==#222222也是如此,等等。