Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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';如果传递了0,则数组中的s返回true?_Php_Arrays - Fatal编程技术网

为什么php';如果传递了0,则数组中的s返回true?

为什么php';如果传递了0,则数组中的s返回true?,php,arrays,Php,Arrays,在下面的中,数组(0,$array)的计算结果为true。这让我很惊讶。我希望false 我知道,添加第三个参数来表示一个严格的检查,如\u array(0,$array,true)将得到所需的结果 也就是说,我很好奇为什么数组(0,$array)中的计算结果为true。起初我以为它只是在0索引处看到一个字符串,但是在数组(1,$array)中的计算结果为false,所以这似乎不能解释它 例子: 这是因为默认情况下使用松散比较,因此当您将0作为输入传递时,它会尝试将数组中的字符串值转换为整数,并

在下面的
中,数组(0,$array)
的计算结果为
true
。这让我很惊讶。我希望
false

我知道,添加第三个参数来表示一个严格的检查,如\u array(0,$array,true)将得到所需的结果

也就是说,我很好奇为什么数组(0,$array)中的
计算结果为
true
。起初我以为它只是在0索引处看到一个字符串,但是在数组(1,$array)
中的
计算结果为
false
,所以这似乎不能解释它

例子:
这是因为默认情况下使用松散比较,因此当您将
0
作为输入传递时,它会尝试将数组中的字符串值转换为整数,并且它们都显示为0(因为它们都不是以数字开头的;请参见),导致数组中的
返回
true
。对于
1
的输入,它返回false,因为所有比较值都是0

您将在以下情况下看到类似的行为:

输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
)
0 is NOT in the array!
Array
(
)
表示
array\u keys
认为数组中的每个值都是0

如果将
strict
参数用于
in_-array
array_-keys
将避免此问题,即

echo in_array(0, $array, true) ? '0 is also in the array!' : '0 is NOT in the array!';
print_r(array_keys($array, 0, true));
输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
)
0 is NOT in the array!
Array
(
)

我猜,类型检查是根据第一个参数的类型将字符串转换为整数。请尝试使用第三个参数
true
vs,因为在PHP中
0==“str”
的计算结果为
true
。@revo只要字符串不以数字开头…@Nick
str
就是
str
。不是别的。我认为这个问题应该作为一个重复问题来解决。快速测试方法是使用var_转储和类型转换
0 is NOT in the array!
Array
(
)