php专区

 首页 > php专区 > PHP基础 > 数组 > php查找数组元素各种方法总结 - php数组

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

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

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. $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. '4''5''7''8''9''10''11''12' 
  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.  ?>
分享到:
php 数组排序各种方法总结 - php数组
php 数组排序各种方法总结 在php中数组排序函数有很多很多,下面我来给各位朋友总结我们常用到的一些数组排序函数与用户自己写的数组排序实例. 数组排序最常用的函数就是 sort($arr); 它的作用是按数组的键值升序排列,并且排序后的数组键名不再是原来的键名,是按新数组来重新设置的键名。 ...
php数组删除元素各种方法总结 - php数组
php数组删除元素各种方法总结 有很多朋友都不知道怎么把数组中元素给删除,下面我来总结各种数组删除元素方法给各位. 删除数组指定元素,代码如下:   //输出  Array ( [0] => Cat [1] => Horse )  几个函数用下来觉得array_search()比较实用. array_search() 函数...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……