Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于in_数组的一个问题_Php_Arrays - Fatal编程技术网

Php 关于in_数组的一个问题

Php 关于in_数组的一个问题,php,arrays,Php,Arrays,最近我在数组中遇到了一个奇怪的问题,我不明白。 e、 g 我把它放在我的台灯上,然后 a bingo! b miss! 我阅读了手册,将第三个参数$strict设置为true,然后它就按预期工作了。但这是否意味着在使用in_array时,我总是需要将strict参数设置为true?请提供建议 关于这意味着,当您希望比较时,必须将第三个参数设置为true,不仅要比较值,还要比较类型 否则,在进行比较时会进行类型转换——例如,请参见 事实上,不带strict和带strict的数组中的与==和===

最近我在数组中遇到了一个奇怪的问题,我不明白。 e、 g

我把它放在我的台灯上,然后

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)