当前位置:  编程技术>php

2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题

    来源: 互联网  发布时间:2014-08-26

    本文导语:  但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现): 1.数组key与value翻转,通过isset判断key是否存在于数组中 代码如下:/** * in_a...

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

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()会。
代码如下:


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;
}


    
 
 

您可能感兴趣的文章:

  • linux c malloc函数定义及用法详解
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • 如何定义一个可变参数的自定义函数
  • 函数有定义怎么提示没有低能定义的错误呢?
  • Python过滤函数filter()使用自定义函数过滤序列实例
  • 请问如何在一个函数内部定义的一个新类中使用函数里声明的变量
  • 急:unix的shell脚本中,定义了一个函数getDate(),在后面的执行命令参数用要使用这个函数的返回值,应该怎么写?
  • 有谁说说jsp中的变量与函数定义
  • 问个在模块中调用内核函数的未定义问题
  • linux shell自定义函数(定义、返回值、变量作用域)介绍
  • signal函数定义该怎么理解?
  • 谁能告诉我这些函数的定义在哪里?
  • Linux C 有没有 查看函数定义的方法?
  • android自定义控件和自定义回调函数步骤示例
  • c/c++ iis7站长之家
  • linux下Eclipse+CDT,如何查看函数的定义、声明
  • 在sql Server自定义一个用户定义星期函数
  • java中函数的缺省参数怎么定义?
  • 自定义的函数可以返回“类”吗?
  • signal函数的定义问题?搞不懂.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类radialgradientpaint的类成员方法: getradius定义及介绍
  • 请问可以用宏定义定义一个二维数组吗?
  • java命名空间javax.xml.stream类xmlinputfactory成员方法: seteventallocator定义参考
  • 想修改路径定义,想找到在哪里定义的,应该怎么办?
  • java命名空间java.text接口attributedcharacteriterator的类成员方法: getallattributekeys定义及介绍
  • php定义数组和使用示例(php数组的定义方法)
  • java命名空间java.beans接口propertyeditor的类成员方法: supportscustomeditor定义及介绍
  • 上次问题解决了,原来是extern被重定义了。。。天阿,关键字也可以被重定义。。。。。欢迎接分
  • java命名空间javax.swing类jtextarea的类成员方法: getcolumnwidth定义及介绍
  • 下面的变量我都下了定义,为什么还出现没定义的信息
  • java命名空间javax.swing类jtextfield的类成员方法: getcolumnwidth定义及介绍
  • oracle异常(预定义异常,自定义异常)应用介绍
  • java命名空间javax.swing类actionmap的类成员方法: allkeys定义及介绍
  • 为什么我在头文件time.h里找不到time_t的定义呢?只有这个定义typedef __time_t time_t;
  • java命名空间javax.swing类inputmap的类成员方法: allkeys定义及介绍
  • 自定义公共类的装载,包的定义
  • java命名空间javax.rmi.corba接口valuehandler的类成员方法: iscustommarshaled定义及介绍
  • java的虚函数是怎样定义的,现想将类A中的变量x定义为只能给子类B与自己类中可访问,而又不能给其他类中用实例A a = new A()的a访问,可
  • java命名空间javax.swing类jcomponent的类成员方法: resetkeyboardactions定义及介绍
  • destoon自定义搜索怎么设置?destoon自定义搜索设置方法
  • java命名空间java.beans接口customizer的类成员方法: setobject定义及介绍
  • 类静态变量能定义在成员方法中吗?? 在线


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3