考虑以下两个例子……
$key = 'jim';
// example 1
if (isset($array[$key])) {
// ...
}
// example 2
if (array_key_exists($key, $array)) {
// ...
}
我想知道这两种方法是否更好。我一直使用第一个例子,但在这个网站上看到很多人使用第二个例子。
那么,哪个更好呢?更快呢?清晰的意图?
考虑以下两个例子……
$key = 'jim';
// example 1
if (isset($array[$key])) {
// ...
}
// example 2
if (array_key_exists($key, $array)) {
// ...
}
我想知道这两种方法是否更好。我一直使用第一个例子,但在这个网站上看到很多人使用第二个例子。
那么,哪个更好呢?更快呢?清晰的意图?
当前回答
Php 7提供了使用空合并运算符的可能性。
null合并运算符(??)已被添加为语法糖,用于需要将三元值与isset()结合使用的常见情况。如果操作数存在且不为NULL,则返回第一个操作数;否则返回第二个操作数。
所以现在你可以在值为null或键不存在的情况下分配一个默认值:
$var = $array[$key] ?? 'default value'
其他回答
如果你对我最近做的一些测试感兴趣:
https://stackoverflow.com/a/21759158/520857
简介:
| Method Name | Run time | Difference
=========================================================================================
| NonExistant::noCheckingTest() | 0.86004090309143 | +18491.315775911%
| NonExistant::emptyTest() | 0.0046701431274414 | +0.95346080503016%
| NonExistant::isnullTest() | 0.88424181938171 | +19014.461681183%
| NonExistant::issetTest() | 0.0046260356903076 | Fastest
| NonExistant::arrayKeyExistsTest() | 1.9001779556274 | +209.73055713%
它和php。net是不同的
isset()不会为数组返回TRUE 对应NULL值的键, 而array_key_exists()可以。
一个非常非正式的测试显示,array_key_exists()比isset()慢2.5倍左右。
好吧,主要的区别是isset()对于对应于空值的数组键不会返回true,而array_key_exists()会返回true。
运行一个小型基准测试会显示isset()更快,但它可能并不完全准确。
Php 7提供了使用空合并运算符的可能性。
null合并运算符(??)已被添加为语法糖,用于需要将三元值与isset()结合使用的常见情况。如果操作数存在且不为NULL,则返回第一个操作数;否则返回第二个操作数。
所以现在你可以在值为null或键不存在的情况下分配一个默认值:
$var = $array[$key] ?? 'default value'
你的代码isset($array[$i]) || $array[$i] === null,在任何情况下都会返回true,即使键不存在(并产生一个未定义的索引通知)。为了获得最佳性能,您需要的是if (isset($array[$key]) || array_key_exists($key,$array)){doWhatIWant();}