为什么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只要字符串不以数字开头…@Nickstr
就是str
。不是别的。我认为这个问题应该作为一个重复问题来解决。快速测试方法是使用var_转储和类型转换
0 is NOT in the array!
Array
(
)