使用 "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