簡體   English   中英

array_key_exists($ key,$ array)vs!empty($ array [$ key])

[英]array_key_exists($key, $array) vs !empty($array[$key])

我見過很多人做過前者,有沒有比其他人更好的表現? 或者它只是一個眼睛糖果? 我個人每次都使用后者,因為它更短,個人對我更具可讀性。

其他回復側重於兩個功能之間的差異。 這是事實,但如果源數組不包含null0"" ,...(空值)值,則可以對兩個函數的速度進行基准測試:

<?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)

因此,如果可能的話,使用emptyisset更快。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM