我见过很多人做过前者,有没有比其他人更好的表现?或者它只是一个眼睛糖果?我个人每次都使用后者,因为它更短,个人对我更具可读性。
答案 0 :(得分:13)
其他回复侧重于两个功能之间的差异。这是事实,但如果源数组不包含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)empty
:float(0.072798013687134)isset
:float(0.070242881774902)对于一个相对大的阵列:
array_key_exists
:float(0.57489585876465)empty
:float(0.0068421363830566)isset
:float(0.0069410800933838)因此,如果可能,使用empty
或isset
会更快。
答案 1 :(得分:5)
$array = array(
'foo' => null
);
echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1
答案 2 :(得分:5)
array_key_exists($key, $array)
和!empty($array[$key])
可以产生不同的结果,因此 这不是性能或偏好的问题 。
| array_key_exists($key, $array) | !empty($array[$key]) |
+-----------------------------+--------------------------------|----------------------+
| $array[$key] does not exist | false | false |
| $array[$key] is truthy | true | true |
| $array[$key] is falsey | true | false |
您可以看到真值表对于假值(false,0,NULL等)是不同的。因此,!empty($array[$key])
不适用于可以将虚假值视为存在的情况,例如不应该在值0有意义的情况下测试$array["number_of_children"]
的空虚。
您可以使用isset($array[$key])
生成与array_key_exists($key, $array)
相同的结果,只有一个例外:
| array_key_exists($key, $array) | isset($array[$key]) |
+-------------------------------------+--------------------------------|---------------------+
| $array[$key] does not exist | false | false |
| $array[$key] is truthy | true | true |
| $array[$key] is falsey but not NULL | true | true |
| $array[$key] is NULL | true | false |
答案 3 :(得分:0)
他们俩都不同
array_key_exists($key, $array)
检查数组中是否存在密钥,如果在数组中设置了给定密钥,则返回TRUE。
,而
!empty($array[$key])
确定变量值是否为空