[英]array_key_exists($key, $array) vs !empty($array[$key])
我見過很多人做過前者,有沒有比其他人更好的表現? 或者它只是一個眼睛糖果? 我個人每次都使用后者,因為它更短,個人對我更具可讀性。
其他回復側重於兩個功能之間的差異。 這是事實,但如果源數組不包含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
:浮動(0.072798013687134) isset
:float(0.070242881774902) 對於一個相對大的數組:
array_key_exists
:float(0.57489585876465) empty
:浮動(0.0068421363830566) isset
:float(0.0069410800933838) 因此,如果可能的話,使用empty
或isset
更快。
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])
不適用於可以認為存在 falsey值的情況,例如$array["number_of_children"]
不應該測試0值有意義的空虛。
您可以使用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 |
$array = array(
'foo' => null
);
echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1
它們都不同
array_key_exists($key, $array)
檢查array_key_exists($key, $array)
是否存在該鍵,如果在數組中設置了給定鍵,則返回TRUE。
而
!empty($array[$key])
確定變量值是否為空
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.