Php 关于in_数组的一个问题
最近我在数组中遇到了一个奇怪的问题,我不明白。 e、 g 我把它放在我的台灯上,然后Php 关于in_数组的一个问题,php,arrays,Php,Arrays,最近我在数组中遇到了一个奇怪的问题,我不明白。 e、 g 我把它放在我的台灯上,然后 a bingo! b miss! 我阅读了手册,将第三个参数$strict设置为true,然后它就按预期工作了。但这是否意味着在使用in_array时,我总是需要将strict参数设置为true?请提供建议 关于这意味着,当您希望比较时,必须将第三个参数设置为true,不仅要比较值,还要比较类型 否则,在进行比较时会进行类型转换——例如,请参见 事实上,不带strict和带strict的数组中的与==和===
a bingo!
b miss!
我阅读了手册,将第三个参数$strict
设置为true
,然后它就按预期工作了。但这是否意味着在使用in_array
时,我总是需要将strict参数设置为true?请提供建议
关于这意味着,当您希望比较时,必须将第三个参数设置为
true
,不仅要比较值,还要比较类型
否则,在进行比较时会进行类型转换——例如,请参见
事实上,不带strict和带strict的数组中的与==
和===
之间的区别相同,请参阅
这种转换在大多数情况下都可以正常工作。。。但如果您试图将0与以字母开头的字符串进行比较,则情况并非如此:该字符串将转换为数值,数值为0。在第一个示例中,数组$a的每个值在转换为数值时都是0。这就是为什么您的第一个示例会导致“宾果游戏”
如果知道依赖隐式转换,或者数据类型相同(例如,在字符串数组中搜索字符串),则不必使用strict参数。否则,您应该使用strict参数,当比较两个必须属于相同类型的值时,您应该使用===而不是==的相同参数。的“默认”模式使用的是类似于的。这意味着0
的比较如下:
var_dump(0 == 'a'); // bool(true)
var_dump(0 == 'b'); // bool(true)
var_dump(0 == 'c'); // bool(true)
现在,在实际比较值之前使用:
如果将数字与字符串进行比较,或者比较涉及数字字符串,则会将每个字符串转换为数字,并以数字形式执行比较
和'a'
,'b'
和'c'
都转换为0
:
var_dump((int) 'a'); // int(0)
var_dump((int) 'b'); // int(0)
var_dump((int) 'b'); // int(0)
但在严格模式下(将第三个参数设置为true)在_array中使用时,a完成,这意味着值和类型必须相等:
var_dump(0 === 'a'); // bool(false)
var_dump(0 === 'b'); // bool(false)
var_dump(0 === 'c'); // bool(false)
因此,在严格模式下使用_数组中的时,您将获得预期结果:
var_dump(in_array(0, $a, true)); // bool(false)
var_dump(in_array(0, $a, true)); // bool(false)