稍长标题:P
无论如何,在ArrayCollection类中,Doctrine使用这个语法来检查Collection是否包含给定的键:
public function containsKey($key)
{
return isset($this->elements[$key]) || array_key_exists($key, $this->elements);
}参考这里。
为什么使用isset和array_key_exists?在这个用例中,它们不是一回事吗?
发布于 2017-01-11 17:36:23
答案是,不。他们不一样。来自文档
isset()不返回对应于空值的数组键的真,而array_key_exists()则返回。
发布于 2017-01-11 17:48:14
array_key_exists()确保条目存在于数组中。
isset()确保条目不是空的(这也是一个存在检查,因为如果它有一个非空值,它显然在数组中)。
首先在函数中使用isset()来寻找键的存在是因为它在较大的数组中速度更快。因此,函数基本上假定,如果键存在,它将有一个非空值,如果找不到,则使用较慢的array_key_exists()对数组进行双重检查。
https://stackoverflow.com/questions/41597142
复制相似问题