php - 什么时候应该在不指定键的情况下对数组使用 isset()?

标签 php arrays language-features

我了解到在检查特定 key 是否存在时不需要isset($array),但是我也知道有一些理由在没有已知 key 的情况下检查 $array 被实例化。

例如:

foreach ($foo as $bar) {
    echo $bar;
}

PHP 注意: undefined variable :foo
PHP 警告:为 foreach() 提供的参数无效

这样更好:

if (isset($foo)) {
    foreach ($foo as $bar) {
    echo $bar;
    }
}

因为我在处理数据时经常使用数组,所以我想问一下是否还有其他一些情况我应该检查整个数组 isset()?或者我应该坚持检查我将要使用的每个 $array[$key] 吗? 这与这样做是否有任何优点或缺点的问题有关:

if (isset($foo[0])) {
    foreach ($foo as $bar) {
        // noop
    }
}

而不是这个:

if (isset($foo)) {
    foreach ($foo as $bar) {
        // noop
    }
}

那么,如果 $key,我是否应该使用 isset($array) 代替 isset($array[$key])是已知的?

最佳答案

在PHP中,isset()是一种特殊形式,不是函数;当您调用 isset($ary[$index]) 时,不必先设置 $ary 本身。即使使用 E_STRICT,调用也不会生成警告,因为 isset 实际上并没有尝试访问 $ary[$index];它确定 $ary 未设置并返回 false。因此,您无需先检查数组即可将 isset 应用于元素。

您的问题表明您已经知道这一点,并且想知道您是否有理由这样做。我唯一能想到的就是效率:如果你要检查数组中是否存在大量键,你可以通过首先检测数组本身何时未设置并跳过所有键来节省一些工作在这种情况下,单独的 key 检查。

关于php - 什么时候应该在不指定键的情况下对数组使用 isset()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273555/

相关文章:

php - 当字段名称和值包含单引号时,PDO 插入失败 (42000/1064)

php - 使用 Laravel 分页或简单分页

c# - 关于 C# 语言规范中隐式转换的问题

php - 为什么这样的语句可以在PHP中运行呢?

ruby - Scala 缺少哪些动态语言(如 Ruby 或 Clojure)的特性?

php - 如何在数据库查询生成器中分组以获得唯一值?

php - Symfony,重定向到(或呈现)带有 404 状态返回码的 404 自定义错误页面

c - 双字符指针和strcpy()之间存在冲突

arrays - 使用 firebase 在 swift 中实现对提要帖子的评论

arrays - k站台可容纳的最大列车数