树枝比较运算符表现不佳

问题描述 投票:1回答:2

如果使用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数组中的键,即使该类没有被添加到右锚元素。我的问题是这个;如果comparison operator (==)为匹配的变量值返回true,为什么第一个代码片段不起作用?为什么第二个代码片段将此类添加到错误的锚元素?

colorData阵列的快照如下所示:enter image description here

那么colors数组是这样的:

enter image description here

php symfony twig
2个回答
3
投票

关于您要比较的第一个示例:

  1. “#FFFFFF”==“#FFFFFF”
  2. "#222222" == "#795548"
  3. “#01579 with”==“#Aqaha”

并且在qazxsw poi的条件下完成此比较3次。你在这里可以做的是再添加一个循环。

colorData[keys] is defined

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

  1. [0,1,2]中的“#FFFFFF”
  2. [0,1,2]中的“#222222”
  3. [0,1,2]中的“#01579b”

请注意,“#FFFFFF”在php中为“等于”(==)为0!

所以你必须真正专注于你比较的东西。在树枝上没有{% 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
投票

你会说第一个代码

===

当你循环遍历3个项目的数组时,colorData[keys] is defined and colorData[keys]['code'] == c.hexcode 将是0,1,2(或者可能是1,2,3,因为它是Twig)。所以你说的

keys

即将colorData [0]与colors [0]进行比较,#FFFFFFF == #FFFFFF也是如此。

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

© www.soinside.com 2019 - 2024. All rights reserved.