Twig скомпилирует «неправильную проверку» в следующем фрагменте PHP:
if (($context["k"] == (isset($context["selected"]) || array_key_exists("selected", $context) ? $context["selected"] : (function () { throw new RuntimeError('Variable "selected" does not exist.', 6, $this->source); })()))) {
Упрощенно это становится
if ($context["k"] == $context["selected"])
Поскольку тип context["k"]
(для первой итерации) является целым числом, PHP
также приведёт правую часть уравнения к целому числу. Таким образом, уравнение фактически становится следующим:
if ((int)1 == (int)'1-5')
, и приведение 1-5
к целому числу становится 1
, в результате чего окончательное уравнение будет иметь вид:
1 == 1
, что соответствует true
Вы можете проверить тот факт, что первый ключ обрабатывается как целое число с помощью следующего фрагмента PHP
:
<?php
$foo = [ '1' => 'bar', ];
$bar = '1-5';
foreach($foo as $key => $value) {
var_dump($key); ## output: (int) 1
var_dump($key == $bar); ## output: true
}
demo