使用 "in" 运算符时奇怪的 Twig 行为
Strange Twig behaviour when using "in" operator
今天我注意到奇怪的行为然后试图检查数组是否有值。
我试过{% if key in array|keys %} ... {% endif %}
条件总是等于 true
。
我稍后尝试这样做:{{ dump('a' in [0, 1, 2]) }}
。
猜猜什么值被转储了?它是 "true" 不知何故。
你们知道为什么会这样吗?
我可以使用 'a' in [0, 1, 2]|join
来解决它,但这不是我想要弄清楚的。
这不是树枝,是 php。以下代码:
var_dump(in_array('a', array(0, 1, 2)));
打印:
bool(true)
将字符串与整数进行比较时,字符串会转换为整数。在这种情况下,'a' 变为 0,因此匹配数组键之一。
尝试做一个 var_dump("foobar" == 0)
,你会发现它也是正确的。
您可以使用 foo['a'] is defined
代替,此处演示:http://twigfiddle.com/y126mg
今天我注意到奇怪的行为然后试图检查数组是否有值。
我试过{% if key in array|keys %} ... {% endif %}
条件总是等于 true
。
我稍后尝试这样做:{{ dump('a' in [0, 1, 2]) }}
。
猜猜什么值被转储了?它是 "true" 不知何故。 你们知道为什么会这样吗?
我可以使用 'a' in [0, 1, 2]|join
来解决它,但这不是我想要弄清楚的。
这不是树枝,是 php。以下代码:
var_dump(in_array('a', array(0, 1, 2)));
打印:
bool(true)
将字符串与整数进行比较时,字符串会转换为整数。在这种情况下,'a' 变为 0,因此匹配数组键之一。
尝试做一个 var_dump("foobar" == 0)
,你会发现它也是正确的。
您可以使用 foo['a'] is defined
代替,此处演示:http://twigfiddle.com/y126mg