3

我想$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)) { ... }
4

2 回答 2

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

是的。

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

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

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

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

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

于 2014-07-08T10:10:49.650 回答
1

我个人应用的经验法则:

  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)...但是如果它走到这一步,恕我直言,还有其他问题。

于 2014-07-08T10:12:08.227 回答