多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > php查找數(shù)組元素各種方法總結(jié)

php查找數(shù)組元素各種方法總結(jié)

來(lái)源:程序員人生   發(fā)布時(shí)間:2013-12-07 02:40:21 閱讀次數(shù):2983次

在php中數(shù)據(jù)查詢(xún)可以分類(lèi)一維數(shù)組查找與多維數(shù)組查找了,如果是簡(jiǎn)單的一維數(shù)組我們可以直接使用in_array,array_search 與遍歷來(lái)實(shí)例了,如果是多維數(shù)組就需要使用其它辦法。

對(duì)于一維數(shù)組我們可以如下操作:

in_array 函數(shù)在數(shù)組中搜索給定的值,in_array(value,array,type) type 可選,如果設(shè)置該參數(shù)為 true,則檢查搜索的數(shù)據(jù)與數(shù)組的值的類(lèi)型是否相同。

array_key_exists() 函數(shù)判斷某個(gè)數(shù)組中是否存在指定的 key,如果該 key 存在,則返回 true,否則返回 false,array_key_exists(key,array)

array_search() 函數(shù)與 in_array() 一樣,在數(shù)組中查找一個(gè)鍵值。如果找到了該值,匹配元素的鍵名會(huì)被返回。如果沒(méi)找到,則返回 false。array_search(value,array,strict)

從這里來(lái)看,在數(shù)據(jù)量不大的時(shí)候,比如小于1000,查找用哪一種都行,都不會(huì)成為瓶頸;當(dāng)數(shù)據(jù)量比較大的時(shí)候,用array_key_exists比較合適,當(dāng)然這里array_key_exists占用的內(nèi)存比較大,經(jīng)測(cè)算二分法查找數(shù)組是否包含某一元素,兼容正反序,代碼實(shí)現(xiàn):

  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 查找數(shù)組第i小元素,代碼如下:

  1. <?php 
  2.      #隨機(jī)選擇第i小的數(shù)字,用隨機(jī)快排實(shí)現(xiàn) 
  3.       
  4.      #交換元素 
  5.      function swap(&$arr$i$j) { 
  6.          $temp = $arr[$i]; 
  7.          $arr[$i] = $arr[$j]; 
  8.          $arr[$j] = $temp
  9.      } 
  10.  
  11.      #隨機(jī)劃分 
  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.          #以第一個(gè)元素作為中樞元素 
  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.      #快速排序,此處沒(méi)用到 
  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小的數(shù) 
  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的元素個(gè)數(shù) 
  64.  
  65.          if ($k == $i) { #如果k=i,說(shuō)明q就是第i小的元素坐標(biāo) 
  66.              return $arr[$q]; 
  67.          } else if ($i < $k) { #如果i<k,說(shuō)明第i小的元素位于q的左邊 
  68.              return randomized_select($arr$begin$q - 1, $i); 
  69.          } else { #第i小的元素位于q的右邊,此時(shí)查找右邊的第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.  ?>
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線(xiàn)----------------------------
分享到:
------分隔線(xiàn)----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品系列在线一区 | 欧美性xxxx极品高清 | 综合九九 | miya亚洲私人影院在线 | 欧美日韩一区二区三区视频在线观看 | 亚洲一区二区福利视频 | 欧美另类丰满69xxxxx | 欧美freesex10一|3 | 欧美人与动性行为另类 | 男人午夜 | 天堂在线天堂最新版 | 久久综合精品不卡一区二区 | 亚洲美女色视频 | 国产欧美在线一区二区三区 | 久久亚 | 毛片大片 | 亚洲最大的黄色网 | 亚洲欧美视频一区 | 国产免费久久精品 | 在线观看成年人视频 | 亚洲最大免费视频网 | 宇都宫紫苑在线播放 rmvb | 宅男午夜视频在线观看 | 一级毛片ab片高清毛片 | 免费一区二区三区四区五区 | 韩国精品一区二区久久 | 亚洲一区二区三区视频 | 伊人久久大香现线蕉 | 国产真人毛片一级视频 | 免费国产高清精品一区在线 | 久久中文精品 | 国产a级淫片 | 亚洲视频www | 亚洲人成综合网站在线 | 欧美日韩中文国产一区 | 国产福利一区二区三区视频在线 | 东方aⅴ免费观看久久av | 日本无卡无吗在线 | 性xxxx欧美 | 福利午夜影院 | 伊人久久大香线蕉精品哪里 |