Почему if в PHP выдает неверный результат, когда он внутри foreach()?
Упрощайте.
Foreach ни при чём. Обычные фокусы приведения типов.var_dump('L' == 'F', 0 == 2, 0 == 'F', 'F' == 0, (int) 'F', '0' == 'F', 'F' == '0');
Не число приводится к строке и сравнивается, а строка приводится к числу. F не является числом, поэтому приводится к 0. 0 равен 0? Да, такое условие истинно.
Сравнение с учётом типов - $op1 === $op2
приведение типов сработало , используйте три знака равенства