Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 I';m从in_数组函数中获得奇怪的输出_Php_Arrays - Fatal编程技术网

Php I';m从in_数组函数中获得奇怪的输出

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

在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 = 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的解释