【问题标题】:What is the proper way of checking a table key existence before using its value?在使用它的值之前检查表键是否存在的正确方法是什么?
【发布时间】:2014-07-08 18:21:09
【问题描述】:

我想在使用之前检查$table['key'] 是否存在。这样做的正确方法是什么?

我见过很多不同的代码,但我不知道它们是否都等价和正确。以下是几个例子:

// 1
if(isset($table['key'])) { ... }

// 2
if(isset($table) and isset($table['key'])) { ... }

// 3
if(isset($table) and array_key_exists('key',$table)) { ... }

【问题讨论】:

    标签: php arrays array-key-exists


    【解决方案1】:
    if (isset($table['key']))
    

    是的。

    if (isset($table) and isset($table['key']))
    

    那是多余的,单独检查两者没有任何好处。

    if (isset($table) and array_key_exists('key', $table))
    

    是的,这也是一个好方法如果 $table['key'] 可能持有null 值并且您仍然对它感兴趣。如果值为nullisset($table['key']) 将返回false,即使它存在。您可以使用array_key_exists 区分这两种情况。

    话虽如此,isset($table) 不是您应该做的事情,因为您应该控制事先声明$table。换句话说,不可思议的是$table 可能不存在,除非是错误的,所以你不应该检查它的存在。只需if (array_key_exists('key', $table)) 就足够了。

    【讨论】:

    • 需要注意的一点是isset() 是一种语言结构,array_key_exists() 是一个函数调用,如果多次使用它会有所不同:) 同样,isset() 适用于实现的对象ArrayAccess.
    【解决方案2】:

    我个人应用的经验法则:

    1. 如果key对应的值可能是null
      1. 如果$table 可能不存在,请使用isset($table) && array_key_exists('key', $table)
      2. 否则,请使用array_key_exists('key', $table)
    2. 在所有其他情况下,请使用isset($table['key'])

    在 1.1 和 1.2 的情况下,技术上可能$table 不是一个数组;在这种情况下,您还需要添加is_array($table) ...但如果它走到这一步,恕我直言,还有其他问题。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2012-04-05
      • 2019-12-11
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多