我想在使用$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))
就足够了。
我个人的经验法则:
- 如果键对应的值可能是
null
:- 如果
$table
不存在,则使用isset($table) && array_key_exists('key', $table)
。 - 否则,使用
array_key_exists('key', $table)
。
- 如果
- 在所有其他情况下,使用
isset($table['key'])
。
在1.1和1.2的情况下,$table
在技术上可能不是数组;在这种情况下,你还需要添加is_array($table)
…但如果它真的走到这一步,我想一定是别的地方出了问题。