如果needle为0,则in_array返回true

hsz*_*hsz 9 php arrays conditional-statements

我有in_array功能问题.以下测试返回true:

in_array(0, array('card', 'cash'))
Run Code Online (Sandbox Code Playgroud)

怎么不可能,我怎么能阻止呢?

然而

in_array(null, array('card', 'cash'))
Run Code Online (Sandbox Code Playgroud)

回报false.

Thi*_*ter 24

将任何不以数字开头的字符串转换为数字会导致0PHP.这正是0与某些字符串进行比较时会发生的情况.有关如何完成各种类型之间的比较的详细信息,请参阅PHP文档.

使用第三个参数(设置为true)in_array以避免松散类型比较.

in_array(0, array('card', 'cash'), true) === false
Run Code Online (Sandbox Code Playgroud)


alw*_*arn 7

当你比较in_array 字符串时转换为int,同时比较不兼容的数据类型,它意味着cashcard转换为0

这都是因为类型铸造

你有2个选择

1.类型铸造

in_array(string(0), array('card', 'cash'))) === false;
Run Code Online (Sandbox Code Playgroud)

2.使用与数据类型匹配的third parameterin_arraytrue

in_array(0, array('card', 'cash'), true) === false;
Run Code Online (Sandbox Code Playgroud)

文档