我见过很多人做前者,做一个与另一个相比有性能优势吗?或者它只是一个眼睛糖果?我个人每次都使用后者,因为它更短,对我个人而言更具可读性。
最佳答案
其他回复主要关注这两个功能的区别。这是真的,但如果源数组不包含 null
或 0
或 ""
,...(空值)值,您可以对两个函数的速度进行基准测试:
<?php
function makeRandomArray( $length ) {
$array = array();
for ($i = 0; $i < $length; $i++) {
$array[$i] = rand(1, $length);
}
return $array;
}
function benchmark( $count, $function ) {
$start = microtime(true);
for ($i = 0; $i < $count; $i++) {
$function();
}
return microtime(true) - $start;
}
$runs = 100000;
$smallLength = 10;
$small = makeRandomArray($smallLength);
var_dump(benchmark($runs, function() {
global $small, $smallLength;
array_key_exists(rand(0, $smallLength), $small);
}));
var_dump(benchmark($runs, function() {
global $small, $smallLength;
!empty($small[rand(0, $smallLength)]);
}));
这给了我以下结果:
对于小数组:
array_key_exists
:float(0.18357992172241)空
: float (0.072798013687134)isset
: float (0.070242881774902)
对于一个相对大的数组:
array_key_exists
:float(0.57489585876465)空
: float (0.0068421363830566)isset
: float (0.0069410800933838)
因此,如果可能的话,使用 empty
或 isset
会更快。
关于php - array_key_exists($key, $array) 与 !empty($array[$key]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884609/