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

And*_*ong 14 php arrays array-key-exists

我见过很多人做过前者,有没有比其他人更好的表现?或者它只是一个眼睛糖果?我个人每次都使用后者,因为它更短,个人对我更具可读性.

KAR*_*ván 14

其他回复侧重于两个功能之间的差异.这是事实,但如果源数组不包含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)]);
}));
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

对于小阵列:

  • 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.

  • `array_key_exists`、`isset` 和 `empty` 的行为方式非常不同。这不应该只是性能问题 (3认同)
  • 尝试在 `isset()` 上运行相同的测试。 (2认同)

Sal*_*n A 7

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                |
Run Code Online (Sandbox Code Playgroud)

您可以看到真值表对于假值(false,0,NULL等)是不同的.因此!empty($array[$key])不适用于可以认为存在假值的情况,例如$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               |
Run Code Online (Sandbox Code Playgroud)


Yos*_*shi 5

$array = array(
    'foo' => null
);

echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1
Run Code Online (Sandbox Code Playgroud)

  • 同样适用于`isset`:`isset($ array ['foo'])`将产生false。 (2认同)