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

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

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

  1. <?php 
  2.      #随机选择第i小的数字,用随机快排实现 
  3.       
  4.      #交换元素 
  5.      function swap(&$arr$i$j) { 
  6.          $temp = $arr[$i]; 
  7.          $arr[$i] = $arr[$j]; 
  8.          $arr[$j] = $temp
  9.      } 
  10.  
  11.      #随机划分 
  12.      function randomized_partition(&$arr$begin$end) { 
  13.          $rand_inx = rand($begin$end); 
  14.          swap($arr$begin$rand_inx); 
  15.          return partition($arr$begin$end); 
  16.      } 
  17.  
  18.      #划分 
  19.      function partition(&$arr$begin$end) { 
  20.          #以第一个元素作为中枢元素 
  21.          $pivot = $begin
  22.          $low = $begin
  23.          $high = $end
  24.  
  25.          while ($low < $high) { 
  26.              while ($low < $high && $arr[$low] <= $arr[$pivot]) { 
  27.                  $low++; 
  28.              } 
  29.  
  30.              while ($low < $high && $arr[$high] >= $arr[$pivot]) { 
  31.                  $high–; 
  32.              } 
  33.  
  34.              swap($arr$low$high); 
  35.          } 
  36.  
  37.          #交换中枢元素 
  38.          if ($arr[$pivot] < $arr[$low]) { 
  39.              $low–; 
  40.          } 
  41.          swap($arr$pivot$low); 
  42.          return $low
  43.      } 
  44.  
  45.      #快速排序,此处没用到 
  46.      function quick_sort(&$arr$begin$end) { 
  47.          $q = randomized_partition($arr$begin$end); 
  48.          if ($q > $begin) { 
  49.              quick_sort($arr$begin$q – 1); 
  50.          } 
  51.          if ($q < $end) { 
  52.              quick_sort($arr$q + 1, $end); 
  53.          } 
  54.      } 
  55.  
  56.      #选取第i小的数 
  57.      function randomized_select(&$arr$begin$end$i) { 
  58.          if ($begin == $end) { 
  59.              return $arr[$begin]; 
  60.          } 
  61.  
  62.          $q = randomized_partition($arr$begin$end); 
  63.          $k = $q – $begin + 1; #k代表小于等于q的元素个数 
  64.  
  65.          if ($k == $i) { #如果k=i,说明q就是第i小的元素坐标 
  66.              return $arr[$q]; 
  67.          } else if ($i < $k) { #如果i<k,说明第i小的元素位于q的左边 
  68.              return randomized_select($arr$begin$q – 1, $i); 
  69.          } else { #第i小的元素位于q的右边,此时查找右边的第i-k小的元素 
  70.              return randomized_select($arr$q + 1, $end$i – $k); 
  71.          } 
  72.      } 
  73.  
  74.      $arr = array(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11); 
  75.      $t = randomized_select($arr, 0, count($arr) – 1, 8); 
  76.      print_r("The 8th minimum element: {$t}"); 
  77.      echo "<br>"
  78.      quick_sort($arr, 0, count($arr) – 1); 
  79.      print_r($arr); 
  80.  ?>
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » php查找数组元素各种方法总结

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡