我已经了解到在检查是否存在特定密钥时不需要isset($array)
,但是我也知道有一些理由可以在没有已知密钥的情况下检查$array
是否已实例化。
例如:
foreach ($foo as $bar) {
echo $bar;
}
PHP注意:未定义的变量: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
}
}
isset($array)
已知,我应该使用isset($array[$key])
代替$key
吗?答案 0 :(得分:15)
在PHP中,isset()
是一种特殊形式,而不是一种功能;当您致电isset($ary[$index])
时,不必先设置$ary
本身。即使使用E_STRICT
,呼叫也不会生成警告,因为isset
实际上并未尝试访问$ary[$index]
;它确定$ary
未设置并返回false
。因此,您不需要先检查数组,以便将isset
应用于元素。
你的问题表明你已经知道了,并且想知道你是否有理由这样做。我唯一能想到的就是效率:如果你要检查一个数组中是否存在大量的键,你可以通过先检测数组本身未设置的时间来节省一些工作,然后只是跳过所有在这种情况下,个别密钥检查。
答案 1 :(得分:5)
如果您想知道阵列是否完全定义,请使用isset($array)
。
如果您想知道是否定义了特定密钥,请使用isset($array[$key])
。
例如,这完全有效:
$foo = array();
foreach($foo as $bar) {
// never called because $foo is an empty array
}