热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php查找数组元素各种方法总结

在php中数据查询可以分类一维数组查找与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array,array_search与遍历来实例了,如果

在php中数据查询可以分类一维数组查找与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array,array_search 与遍历来实例了,如果是多维数组就需要使用其它办法。

对于一维数组我们可以如下操作:

in_array 函数在数组中搜索给定的值,in_array(value,array,type) type 可选,如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false,array_key_exists(key,array)

array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。array_search(value,array,strict)

从这里来看,在数据量不大的时候,比如小于1000,查找用哪一种都行,都不会成为瓶颈;当数据量比较大的时候,用array_key_exists比较合适,当然这里array_key_exists占用的内存比较大,经测算二分法查找数组是否包含某一元素,兼容正反序,代码实现:

  1. $searchValue = (int)$_GET['key']; 
  2. function search(array $array$value
  3. $max = count($array)-1; 
  4. $min = 0; 
  5. $isAscSort = $array[$min] < $array[$max]; 
  6. while (TRUE) { 
  7. $sum = $min+$max
  8. $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2); 
  9. if ($max < $min) { 
  10. return -1; 
  11. else if ($value == $array[$midKey]) { 
  12. return 1; 
  13. else if ($value > $array[$midKey]) { 
  14. $isAscSort ? $min = $midKey+1 : $max = $midKey-1; 
  15. else if ($value < $array[$midKey]) { 
  16. $isAscSort ? $max = $midKey-1 : $min = $midKey+1; 
  17. $array = array
  18. &#39;4&#39;&#39;5&#39;&#39;7&#39;&#39;8&#39;&#39;9&#39;&#39;10&#39;&#39;11&#39;&#39;12&#39; 
  19. ); 
  20. // 正序 
  21. echo search($array$searchValue); 
  22. // 逆序 
  23. rsort($array); 
  24. echo search($array$searchValue); 

例二,PHP 查找数组第i小元素,代码如下:

  1.      #随机选择第i小的数字,用随机快排实现 
  2.       
  3.      #交换元素 
  4.      function swap(&$arr$i$j) { 
  5.          $temp = $arr[$i]; 
  6.          $arr[$i] = $arr[$j]; 
  7.          $arr[$j] = $temp
  8.      } 
  9.  
  10.      #随机划分 
  11.      function randomized_partition(&$arr$begin$end) { 
  12.          $rand_inx = rand($begin$end); 
  13.          swap($arr$begin$rand_inx); 
  14.          return partition($arr$begin$end); 
  15.      } 
  16.  
  17.      #划分 
  18.      function partition(&$arr$begin$end) { 
  19.          #以第一个元素作为中枢元素 
  20.          $pivot = $begin
  21.          $low = $begin
  22.          $high = $end
  23.  
  24.          while ($low < $high) { 
  25.              while ($low < $high && $arr[$low] <= $arr[$pivot]) { 
  26.                  $low++; 
  27.              } 
  28.  
  29.              while ($low < $high && $arr[$high] >= $arr[$pivot]) { 
  30.                  $high--; 
  31.              } 
  32.  
  33.              swap($arr$low$high); 
  34.          } 
  35.  
  36.          #交换中枢元素 
  37.          if ($arr[$pivot] < $arr[$low]) { 
  38.              $low--; 
  39.          } 
  40.          swap($arr$pivot$low); 
  41.          return $low
  42.      } 
  43.  
  44.      #快速排序,此处没用到 
  45.      function quick_sort(&$arr$begin$end) { 
  46.          $q = randomized_partition($arr$begin$end); 
  47.          if ($q > $begin) { 
  48.              quick_sort($arr$begin$q - 1); 
  49.          } 
  50.          if ($q < $end) { 
  51.              quick_sort($arr$q + 1, $end); 
  52.          } 
  53.      } 
  54.  
  55.      #选取第i小的数 
  56.      function randomized_select(&$arr$begin$end$i) { 
  57.          if ($begin == $end) { 
  58.              return $arr[$begin]; 
  59.          } 
  60.  
  61.          $q = randomized_partition($arr$begin$end); 
  62.          $k = $q - $begin + 1; #k代表小于等于q的元素个数 
  63.  
  64.          if ($k == $i) { #如果k=i,说明q就是第i小的元素坐标 
  65.              return $arr[$q]; 
  66.          } else if ($i < $k) { #如果i
  67.              return randomized_select($arr$begin$q - 1, $i); 
  68.          } else { #第i小的元素位于q的右边,此时查找右边的第i-k小的元素 
  69.              return randomized_select($arr$q + 1, $end$i - $k); 
  70.          } 
  71.      } 
  72.  
  73.      $arr = array(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11); 
  74.      $t = randomized_select($arr, 0, count($arr) - 1, 8); 
  75.      print_r("The 8th minimum element: {$t}"); 
  76.      echo "
    "
  77.      quick_sort($arr, 0, count($arr) - 1); 
  78.      print_r($arr); 
  79.  ?>

推荐阅读
  • 如何在Faceu激萌中设置和使用妆容切换特效?
    本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ... [详细]
  • 本文介绍了拍摄高质量Vlog所需的设备,包括索尼A7 III相机、蔡司镜头、罗德麦克风、单反稳定器、苹果手机及其配件、灯光设备等。此外,还探讨了后期制作所需的软件工具,如剪辑、特效和调色软件。无论你是业余爱好者还是专业创作者,选择合适的设备至关重要。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 电子元件封装库:三极管、MOS管及部分LDO(含3D模型)
    本资源汇集了常用的插件和贴片三极管、MOS管以及部分LDO的封装,涵盖TO和SOT系列。所有封装均配有高质量的3D模型,共计96种,满足日常设计需求。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 小红书提高MCN机构入驻门槛,需缴纳20万元保证金
    近期,小红书对MCN机构的入驻要求进行了调整,明确要求MCN机构在入驻时需缴纳20万元人民币的保证金。此举旨在进一步规范平台内容生态,确保社区的真实性和用户体验。 ... [详细]
author-avatar
txwd2008
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有