这种奇怪的PHP行为是什么原因造成的?

Mat*_*hew 6 php arrays types

我有以下代码:

$data = array(); // prep array
$data['aardvark'] = true;

print_r($data); // output array
echo "\n";
var_dump(in_array('zebra', $data));
Run Code Online (Sandbox Code Playgroud)

输出如下:

Array
(
    [aardvark] => 1
)

bool(true)
Run Code Online (Sandbox Code Playgroud)

尽管事实上zebra显然不在阵列中.看起来它与PHP的松散类型系统有关.(bool) 'zebra'true,并且true数组中有一个所以in_array返回true?

我想我可以看到逻辑,但它有缺陷.这是一个PHP错误吗?

干杯.

dqh*_*cks 4

不是错误。你说得完全正确。要正确找到您要查找的内容,您必须执行以下操作:

if (in_array('zebra', $data, true)) {
Run Code Online (Sandbox Code Playgroud)

尽管在同一数组(字符串和布尔值)中存储不同数据类型的情况可能很少见。如果您存储的数据不是列表,您很可能应该使用对象。