Php 细枝解析数组并按键检查
我想看看数组是否有键。第一种情况返回2个结果1-5和,而第二种情况似乎工作正常 你知道为什么会这样吗Php 细枝解析数组并按键检查,php,twig,Php,Twig,我想看看数组是否有键。第一种情况返回2个结果1-5和,而第二种情况似乎工作正常 你知道为什么会这样吗 {% set options = {'1' : '1' , '1-5' : '5' , '1-12' : '12' } %} {% set selected = '1-5' %} Wrong check {% for k,v in options %} {% if k == selected %} {{ k }} {% endif %} {% e
{% set options = {'1' : '1' , '1-5' : '5' , '1-12' : '12' } %}
{% set selected = '1-5' %}
Wrong check
{% for k,v in options %}
{% if k == selected %}
{{ k }}
{% endif %}
{% endfor %}
Right
{% for k,v in options %}
{% if k|format == selected|format %}
{{ k }}
{% endif %}
{% endfor %}
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
}