gpt4 book ai didi

php - 如果传递 0,为什么 php 的 in_array 返回 true?

转载 作者:行者123 更新时间:2023-12-04 10:59:48 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does in_array() wrongly return true with these (large numeric) strings?

(9 个回答)


1年前关闭。




在下面 in_array(0, $array)计算结果为 true .这让我很惊讶。我期待 false .
我知道添加第三个参数来表示严格检查,如 in_array(0, $array, true)会给我想要的结果。
也就是说,我很好奇为什么in_array(0, $array)计算结果为 true .起初我以为只是在 0 索引处看到一个字符串,但是 in_array(1, $array)计算结果为 false所以这似乎并不能解释它。
示例:Runable fiddle here

<?php 

$array = [
'inputs',
'app',
'post',
'server',
];

echo in_array('inputs', $array) ? '"inputs" is in the array...' : '';
echo "\n";

echo in_array(0, $array) ? '0 is also in the array!' : '';
echo "\n";

echo in_array(1, $array) ? '1 is also in the array!' : '1 is NOT in the array!';
输出:
"inputs" is in the array...
0 is also in the array! <---- huh?
1 is NOT in the array!

最佳答案

这是因为默认情况下 in_array 使用松散比较,所以当你通过 0作为输入,它尝试将数组中的字符串值转换为整数,并且它们都以 0 形式出现(因为它们都不以数字开头;请参阅 manual ),导致 in_array返回 true .对于 1 的输入,它返回 false因为所有的比较值都是0。

你会看到类似的行为 array_keys :

print_r(array_keys($array, 0));

输出:
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
)

表明 array_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));

输出:
0 is NOT in the array!
Array
(
)

Demo on 3v4l.org

关于php - 如果传递 0,为什么 php 的 in_array 返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com