php - isset() 为不存在的数组键返回 true 的奇怪行为

标签 php arrays isset

我有以下名为 $fruits 的数组:

Array
(
    [response] => Array
        (
            [errormessage] => banana
        )  

    [blah] => Array
        (
            [blah1] => blahblah1
            [blah2] => blahblah2
            [blah3] => blahblah3
            [blah4] => blahblah4
        )  

)

然而当我这样做时:

isset($fruits['response']['errormessage']['orange'])

它返回!

究竟是什么会导致这种奇怪的行为,我该如何解决?

谢谢!

最佳答案

归结为 PHP 的疯狂类型系统。

$fruits['response']['errormessage'] 是字符串 'banana',因此您正试图通过['orange'] 索引。

字符串 'orange' 为了索引的目的被转换为一个整数,所以它变成了 0,如 $fruits['response'] ['errormessage'][0]。字符串的第 0 个索引是字符串的第一个字符,因此对于非空字符串,它实际上是已设置的。因此 isset() 返回 true。

我一开始就不知道您要做什么,所以我无法为此提供任何“修复”。这是设计使然。

关于php - isset() 为不存在的数组键返回 true 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132715/

相关文章:

php - 使用 JS 扩展表单字段

php - Middleware Slim PHP Framework 中如何响应

php - 如何使用 Laravel 4 将数据保存到我的生产/开发服务器中?

c++ - 如何拥有灵活的嵌套初始化器?

javascript - JQuery - 将twodim 数组传递给$.post 失败

PHP:isset() 为对象的动态属性返回 false

r - 测试 R 中是否设置了函数的参数

php - 在 yii2 中放置 beforesave 函数的位置,如何在 Controller 中访问

php - 在 PHP ISSET 函数中使用 HTML 表单

sql - 配置单元-展开数组列并使用带有选择语句错误的LEFT联接或子查询