在使用表键值之前,检查表键是否存在的正确方法是什么?


What is the proper way of checking a table key existence before using its value?

我想在使用$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)) { ... }
if (isset($table['key']))

是的。

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

那是多余的,单独检查这两个没有好处。

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

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

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

我个人的经验法则:

  1. 如果键对应的值可能是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)…但如果它真的走到这一步,我想一定是别的地方出了问题。