情境

有时候,我们需要判断一个元素是否存在于已有数据中(以此来获得非重复值),这时候,使用isset来判断会比in_array快得多很多!!

测试

1)准备测试数据

$exists_a = [];
$exists_b = [];
$check = []; for ($i=0,$len=100000; $i<$len; $i++)
{
$check[] = $i;
} for ($i=0,$len=10000; $i<$len; $i++)
{
$rnd = round(0,100000);
$exists_a[] = $rnd;
$exists_b[$rnd] = 1;
}

2)使用in_array做判断验证

$result     = [];
$start_time = microtime(true);
foreach ($check as $key => $value)
{
if (!in_array($value, $exists_a))
{
$result[] = $value;
}
}
$end_time = microtime(true);
echo '使用in_array验证元素是否存在耗时:' . ($end_time - $start_time), '秒<hr/>';

结果:// 使用in_array验证元素是否存在耗时:10.537812948227秒

3)使用isset做判断验证

$result     = [];
$start_time = microtime(true);
foreach ($check as $key => $value)
{
if (!isset($exists_b[$value]))
{
$result[] = $value;
}
}
$end_time = microtime(true);
echo '使用isset验证元素是否存在耗时:' . ($end_time - $start_

结果:// 使用isset验证元素是否存在耗时:0.018424034118652秒

补充

使用 array_key_exists 判断

<?php
$exists = [];
$check = []; for ($i=0,$len=100000; $i<$len; $i++)
{
$check[] = $i;
} for ($i=0,$len=10000; $i<$len; $i++)
{
$rnd = round(0,100000);
$exists[$rnd] = $rnd;
} $result = [];
$start_time = microtime(true);
foreach ($check as $key => $value)
{
if (array_key_exists($value, $exists))
{
$result[] = $value;
}
}
$end_time = microtime(true);
echo '使用array_key_exists验证元素是否存在耗时:' . ($end_time - $start_time), '秒<hr/>';
?>

结果:// 使用array_key_exists验证元素是否存在耗时:0.022138833999634秒

总结

尽量少用in_array,isset 和 array_key_exists 会比 in_array 快得多很多!!

判断元素是否存时,使用isset会比in_array快得多的更多相关文章

  1. javascript判断元素存在和判断元素存在于实时的dom中的方法

    今天(周六)下午我在公司加班时不知道要干什么,就打开公司的一个wordpress项目网站,想看下之前自己做的一个网页是否有问题. 打开网站首页,我习惯性的打开了chrome的调试工具,然后鼠标开始滚动 ...

  2. 判断元素16种方法expected_conditions

    前言 标签(空格分隔): 判断元素 经常有小伙伴问,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_condition ...

  3. javascript和jquery如何判断元素是否存在最佳。

    在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的.例如: document.getElementById(&q ...

  4. 判断元素(expected_conditions)

    判断元素 如何判断一个元素是否存在,如何判断 alert 弹窗出来了,如何判断动态的元素等等一系列的判断,在 selenium 的 expected_conditions 模块收集了一系列的场景判断方 ...

  5. selenium常用的API(七)判断元素是否可见

    web页面不可见的元素虽不在页面上显示,但是存在于DOM树中,这些元素webdriver也能找到. element.is_displayed()方法可以判断元素是否在页面上显示,如果显示返回True, ...

  6. 如何判断元素是否在可视区域ViewPort

    个性签名: 生如夏花,逝如冬雪:人生如此,何悔何怨. 前言: 经常需要计算元素的大小或者所在页面的位置,offsetWidth,clientWidth,scrollWidth,scrollTop这几个 ...

  7. pandas DataFrame的新增行列,修改、删除、筛选、判断元素以及转置操作

    1)指定行索引和列索引标签 index 属性可以指定 DataFrame 结构中的索引数组,  columns 属性可以指定包含列名称的行, 而使用 name 属性,通过对一个 DataFrame 实 ...

  8. JQuery判断元素是否存在

    JQuery判断元素是否存在的原理与javascript略有不同,因为$选择器选择的元素无论是否存在都不会返回null或undefined,要使用JQuery判断元素是否存在,只能使用length属性 ...

  9. jQuery如何判断元素是否是隐藏的?

    jQuery函数简介: is(expr) 用一个表达式来检查当前选择的元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true. 如果没有元素符合,或者表达式无效,都返回'false'. 注 ...

随机推荐

  1. 关于网页游戏断线重连的思路和demo求助

    http://bbs.9ria.com/thread-146997-1-1.html —————————————————————————————————————————————————— 1:俺有什么 ...

  2. Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)

    一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人 ...

  3. Spring JDBC多批次操作

    以下示例将演示如何使用spring jdbc在单个调用中进行多批次更新. 我们将在批量大小为1的多批次操作中更新student表中的记录. student表的结果如下 - CREATE TABLE s ...

  4. Mysql 8.0.11版本,安装成功,使用Navicat连接失败。

    Note:本文只针对mac!! 问题 安装mysql成功之后,想自己弄个数据库试试,但是报错.并不是错误代号,而是一段代码: Authentication plugin 'caching_sha2_p ...

  5. (原)U盘可见容量不能被识别的处理方法

    之前我手里有1个8G的U盘,因为前段时间借给了其他人使用,然后今天拿起来用的时候,发现8G的U盘只有200M未被识别,我用管理器下的磁盘管理查看了下,有7G的空间未被识别. 怎么办? 进入win7: ...

  6. CI框架 -- 核心文件 之 Lang.php(加载语言包)

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class CI_Lang { var $l ...

  7. Python内部机制。

    type ,object ,__class__ ,__bases__ ,__metaclass__ , -------------------------不明白的地方----------------- ...

  8. 阿里云centos7安装桌面环境

    centos7. 1.安装X11.yum groupinstall "X Window System". 2.安装gnome. 全安装:yum groupinstall -y &q ...

  9. asp.net网页中添加年月日时分秒星期。

    html代码如下: 现在是<span id="TimeSpan"></span> <script type="text/javascript ...

  10. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...