PHP - 当键包含小数位时,如何检查数组键是否存在?

PHP - How to check array key exists when key include decimal place?

我想知道是否可以提供一些帮助来理解为什么 array_key_exists 在使用小数位时找不到我的密钥?

<?php
$arr[1] = 'test';
$arr[1.1] = 'anothertesty';

foreach ($arr as $key => $value) {
    if (array_key_exists($key, $arr)) {
        echo 'found' . $key;
    }
}

谁能告诉我正确的处理方法是什么。我需要找到 1.1 数组键。

如果你使用 float 作为键,它会自动转换为 int

查看以下文档

https://www.php.net/manual/en/language.types.array.php

The key can either be an int or a string. The value can be of any type.

Additionally the following key casts will occur:

[...]

Floats are also cast to ints, which means that the fractional part will be truncated. E.g. the key 8.7 will actually be stored under 8.

意思是,你的 float 被转换为 int 并且

$arr[1.1] = 'test';

现在可以通过

访问
echo $arr[1]

此外,在您的情况下,第一个作业

$arr[1] = 'test';

将通过调用

立即被anothertesty覆盖
$arr[1.1] = 'anothertesty';

这就是为什么最后您会发现 1 作为数组中唯一的键

您可以使用字符串作为键,这样您就不会将 float 转换为 int。需要比较的时候可以转回float:

<?php
$arr['1'] = 'test';
$arr['1.1'] = 'anothertesty';

foreach ($arr as $key => $value) {
    if (array_key_exists($key, $arr)) {
        echo 'found' . $key;
    }
}