首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >array_key_exists($key,$array) vs !empty($array[$key])

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

Stack Overflow用户
提问于 2011-07-31 00:56:39
回答 4查看 15.4K关注 0票数 16

我见过很多人做前者,做一种比做另一种有没有性能上的好处?或者这只是一个花哨的东西?我个人每次都使用后者,因为它更短,对我个人来说更具可读性。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-31 01:10:17

其他的回答集中在两个函数之间的差异上。这是正确的,但是如果源数组不包含null0"",...(空值)您可以对两个函数的速度进行基准测试的值:

代码语言:javascript
复制
<?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)

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

票数 16
EN

Stack Overflow用户

发布于 2011-07-31 01:09:40

array_key_exists($key, $array)!empty($array[$key])可以产生不同的结果,因此,这不是性能或偏好的问题。

代码语言:javascript
复制
                              | 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值(false、0、NULL等)是不同的。因此,!empty($array[$key])不适用于可能存在假值的情况,例如,在值为0的情况下,不应测试$array["number_of_children"]是否为空。

您可以使用isset($array[$key])生成与array_key_exists($key, $array)相同的结果,但只有一个例外:

代码语言:javascript
复制
                                      | 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               |
票数 9
EN

Stack Overflow用户

发布于 2011-07-31 01:00:17

代码语言:javascript
复制
$array = array(
    'foo' => null
);

echo (int)!empty($array['foo']); // 0
echo (int)array_key_exists('foo', $array); // 1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6884609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档