2个自定义的PHP in

 但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现):

 
1.数组key与value翻转,通过isset判断key是否存在于数组中
 
 代码如下:
/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $flipArray = array_flip($array);
    return isset($flipArray[$item]);
}
大家可能也会问为什么不用 array_key_exists 来做判断二用isset呢? 下面看下array_key_exists() 与 isset() 的对比:
isset()对于数组中为NULL的值不会返回TRUE,而array_key_exists()会。
 代码如下:<?php
$search_array = array('first' => null, 'second' => 4);
 
// returns false
isset($search_array['first']);
 
// returns true
array_key_exists('first', $search_array);
?>
 
2.用implode连接,直接用strpos判断
 
用implode函数+逗号连起来,直接用strpos判断。php里面字符串取位置速度非常快,尤其是在大数据量的情况下。不过需要注意的是首尾都要加”,” ,这样比较严谨。如: ,user1,user2,user3, 查找的时候,查,user1,。还有strpos要用!== false,因为第一个会返回0。示例如下:
 
 代码如下:/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(',', $array);
    $str = ',' . $str . ',';
    $item = ',' . $item . ',';
    return false !== strpos($item, $str) ? true : false;
}
 

时间: 2024-10-29 07:25:34

2个自定义的PHP in的相关文章

iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四--自定义键盘控件         iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格.这篇博客,将介绍如何开发一个第三方的键盘控件. 一.了解UIInputViewController类         UIInputViewController是系统扩展支持键盘扩展的一个类,通过这个类,我们可以自定义一款我们自己的键盘提供给系统使用.         首先,我们先来看一下这个类中的一些属性和方法:

PostgreSQL 11 preview - pgbench 变量、函数扩展 - 暨pgbench 自定义 benchmark讲解

标签 PostgreSQL , pgbench , 压测 , 变量 , tpc-b , 自定义压测 背景 pgbench是PostgreSQL软件包中的一款benchmark软件,纯C编码,效率高,压测方便. 内置TPC-B benchmark测试,同时支持自定义benchmark. 详细文档见 https://www.postgresql.org/docs/10/static/pgbench.html pgbench 自定义benchmark脚本支持的语法 变量赋值的语法 压测需要生成输入变量

AngularJS中的自定义指令的使用介绍

  这篇文章主要介绍了深入讲解AngularJS中的自定义指令的使用,AngularJS是一款热门的JavaScript开发库,需要的朋友可以参考下 AngularJS的自定义指令,就是你自己的指令,加上编译器编译DOM时运行的原生核心函数.这可能很难理解.现在,假设我们想在应用中不同页面复用一些特定的代码,而又不复制代码.那么,我们就可以简单地把这段代码放到单独的文件,并调用使用自定义指令的代码,而不是一遍又一遍地敲下来.这样的代码更容易理解.AngularJS中有四种类型的自定义指令: 元素

教你Word中创建自定义工具栏的技巧

  每个人都有不同的使用电脑的习惯,在Word中也可以让大家实现自己想要的工具栏设置,你大可根据自己的操作习惯来自定义.以下,便是进行自定义工具栏创建的技巧了,感兴趣的可以学习一下. Word 1.打开"自定义"窗口.在菜单栏的"工具"--"自定义", 打开"自定义"窗口,单击切换到"工具栏"选项卡(或者点击菜单栏的"视图"--"工具栏"--"自定义&quo

织梦ckeditor添加自定义按钮,实现自定义样式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 织梦到了5.7之后编辑器不再是fck,而是升级成了ckeditor3.6.2.在我们对内容页面的body正文部分进行编辑的时候,前台正文部分有的时候需要一个自定义样式,但ckeditor并没有自定义样式涉及. 例如页面:http://www.badubox.com/game/500.html, 可以看到有虚线边框的地方,就是自定义样式. 当然

EMF介绍系列(四、枚举类型、自定义类型和Map)

除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型 .自定义类型,它们对于一个完整可用的模型也是必不可少的,这篇帖子主要介绍EMF里它们 的使用方法.另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定 义方法. 枚举类型 继续前面帖子的例子,现在要为产品增加一个评分属性,评分值可以是好中差之一,像这 样属性值只能是有限几个值之一的属性就应该定义为枚举类型(Enumeration).在类图里首 先创建一个名为Score的枚举类型,然后为它增加

在Word2010中使用自定义图表模板创建图表

第1步,打开Word2010文档窗口,切换到"插入"功能区.在"插图"分组中单击"图表"按钮,如图1所示. 图1 单击"图表"按钮 第2步,在打开的"插入图表"对话框中单击"模板"选项,在右侧的"我的模板"列表中选中用户创建的自定义模板,并单击"确定"按钮,如图2所示. 图2 "插入图表"对话框 第3步,返回Word2010窗口

自定义dhtmlxGrid表头菜单

dhtmlxGrid可以定义表头菜单以及表格右键菜单,表格右键菜单可以自定义,但是表头菜单只能使用其提供的菜单.dhtmlxGrid默认的表头菜单可以决定表格中每一列是否在表格中显示,并没有提供更多的扩展,如果我想自定义表头菜单,该怎么做呢?本文就是基于自定义表格菜单,说说我的实现方式. 以下是dhtmlxGrid的表头菜单效果: 其功能过于单一,以下是表格右键菜单效果: 如果能够像表格菜单一样自定义表头菜单,那会是一件非常有意义的事情,因为dhtmlxGrid菜单都是一些针对行和单元格的操作,

Sublime 插件自定义学习

用了sublime很长时间了,感觉这个IDE确实不错,简约而不简单 记的之前用webstorm的时候,每当新建html页的时候,系统总会自动的填充一些骨架代码,但是用sublime的时候,新建html文件的时候,系统不会自动填充,所以 我想用sublime插件机制,自动填充骨架代码. sublime提供了灵活的插件扩展机制,下面提供一个完整的自动填充html骨架代码的小插件,纯当练手:) 1.创建自定义插件代码 点击Tools菜单下的New plugin..,系统会自动生成一个插件的基本模板,代

PHP5自定义Module开发

本文中需要用到上一篇文章中,只不过需要编译成动态或静态链接库的形式.本文中,将WebService客户端程序中的main()改名为testPhpModule(),并将打印到控制台的字符串返回,编译完成后生成文件名为libTest.so. 一.环境准备 将生成的libTest.so文件拷贝到/usr/lib目录下,并执行命令/sbin/ldconfig 准备PHP的源代码文件,解压缩. 二.开发PHP Module 首先进入PHP源代码目录中的ext目录,执行如下命令: # ./ext_skel