Php I';m从in_数组函数中获得奇怪的输出
在php中,以下代码返回Php I';m从in_数组函数中获得奇怪的输出,php,arrays,Php,Arrays,在php中,以下代码返回true $array = array( 'isReady' => false, 'isPHP' => true, 'isStrange' => true ); var_dump(in_array('sitepoint.com', $array)); 结果是为true为什么?因为第三个参数是$strict bool in_array ( mixed $needle , array $haystack [, bool $strict = FA
true
$array = array(
'isReady' => false,
'isPHP' => true,
'isStrange' => true
);
var_dump(in_array('sitepoint.com', $array));
结果是
为true
为什么?因为第三个参数是$strict
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
默认情况下,它是FALSE
,这使得它使用=
'sitepoint.com' == true
'sitepoint.com' === true
事实上是这样的(因为PHP的类型转换)
您要执行以下操作:
in_array('sitepoint.com', $array, TRUE);
这将使它使用==
'sitepoint.com' == true
'sitepoint.com' === true
那不是真的。因为第三个参数是,
$strict
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
默认情况下,它是FALSE
,这使得它使用=
'sitepoint.com' == true
'sitepoint.com' === true
事实上是这样的(因为PHP的类型转换)
您要执行以下操作:
in_array('sitepoint.com', $array, TRUE);
这将使它使用==
'sitepoint.com' == true
'sitepoint.com' === true
不是这样。
在数组中执行松散比较(仅检查值,不检查类型和值)。由于您的数组值都是布尔值(true
和false
),搜索字符串(“sitepoint.com”)被强制为布尔值,因此您的代码将转换为:
var_dump(in_array((bool)'sitepoint.com', array(true, false, true)));
由于字符串在转换为bool
时为true
,因此数组中的返回true
要强制进行类型和值检查,请将true
作为第三个参数传递给\u数组中的
在数组中执行松散比较(仅检查值,不检查类型和值)。由于您的数组值都是布尔值(true
和false
),搜索字符串(“sitepoint.com”)被强制为布尔值,因此您的代码将转换为:
var_dump(in_array((bool)'sitepoint.com', array(true, false, true)));
由于字符串在转换为bool
时为true
,因此数组中的返回true
要强制进行类型和值检查,请将true
作为第三个参数传递给\u数组中的
因为:('sitepoint.com'==true==true
它们不是相同的问题@Thomas Andrews因为:('sitepoint.com'==true==true
它们不是相同的问题@Thomas Andrews为什么'sitepoint.com'==true是真的?我弄糊涂了:)@Anri:因为PHP在数组中执行时所做的是循环数组,并将传递的值与数组中的值进行比较。当它到达true
时,它会执行'sitepoint.com'==true
。这两种类型不相同,因此需要转换它们。您正在将字符串与布尔值进行比较,因此它会将字符串转换为布尔值,以便它们的类型相同。在文档中,它解释了这是如何工作的()。因此,'sitepoint.com'==true
变成了(bool)'sitepoint.com'==true
,这是true==true
。感谢@Rocket Hazmat对“sitepoint.com'==true”的解释?我弄糊涂了:)@Anri:因为PHP在数组中执行时所做的是循环数组,并将传递的值与数组中的值进行比较。当它到达true
时,它会执行'sitepoint.com'==true
。这两种类型不相同,因此需要转换它们。您正在将字符串与布尔值进行比较,因此它会将字符串转换为布尔值,以便它们的类型相同。在文档中,它解释了这是如何工作的()。因此,'sitepoint.com'==true
变成了(bool)'sitepoint.com'==true
,这是true==true
。感谢@Rocket Hazmat的解释