好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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占用的内存比较大,经测算二分法查找数组是否包含某一元素,兼容正反序,代码实现:

<?php  $searchValue  = (int) $_GET [ 'key' ];  function  search( array   $array ,  $value )  {  $max  =  count ( $array )-1;  $min  = 0;  $isAscSort  =  $array [ $min ] <  $array [ $max ];  while  (TRUE) {  $sum  =  $min + $max ;  $midKey  = (int)( $sum %2 == 1 ?  ceil ( $sum /2) :  $sum /2);  if  ( $max  <  $min ) {  return  -1;  }  else   if  ( $value  ==  $array [ $midKey ]) {  return  1;  }  else   if  ( $value  >  $array [ $midKey ]) {  $isAscSort  ?  $min  =  $midKey +1 :  $max  =  $midKey -1;  }  else   if  ( $value  <  $array [ $midKey ]) {  $isAscSort  ?  $max  =  $midKey -1 :  $min  =  $midKey +1;  }  }  }  $array  =  array (  '4' ,  '5' ,  '7' ,  '8' ,  '9' ,  '10' ,  '11' ,  '12'   );  // 正序   echo  search( $array ,  $searchValue );  // 逆序   rsort( $array );  echo  search( $array ,  $searchValue ); 

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

<?php       #随机选择第i小的数字,用随机快排实现              #交换元素        function  swap(& $arr ,  $i ,  $j ) {            $temp  =  $arr [ $i ];            $arr [ $i ] =  $arr [ $j ];            $arr [ $j ] =  $temp ;       }         #随机划分        function  randomized_partition(& $arr ,  $begin ,  $end ) {            $rand_inx  = rand( $begin ,  $end );           swap( $arr ,  $begin ,  $rand_inx );            return  partition( $arr ,  $begin ,  $end );       }         #划分        function  partition(& $arr ,  $begin ,  $end ) {           #以第一个元素作为中枢元素            $pivot  =  $begin ;            $low  =  $begin ;            $high  =  $end ;              while  ( $low  <  $high ) {                while  ( $low  <  $high  &&  $arr [ $low ] <=  $arr [ $pivot ]) {                    $low ++;               }                  while  ( $low  <  $high  &&  $arr [ $high ] >=  $arr [ $pivot ]) {                    $high --;               }                 swap( $arr ,  $low ,  $high );           }             #交换中枢元素            if  ( $arr [ $pivot ] <  $arr [ $low ]) {                $low --;           }           swap( $arr ,  $pivot ,  $low );            return   $low ;       }         #快速排序,此处没用到        function  quick_sort(& $arr ,  $begin ,  $end ) {            $q  = randomized_partition( $arr ,  $begin ,  $end );            if  ( $q  >  $begin ) {               quick_sort( $arr ,  $begin ,  $q  - 1);           }            if  ( $q  <  $end ) {               quick_sort( $arr ,  $q  + 1,  $end );           }       }         #选取第i小的数        function  randomized_select(& $arr ,  $begin ,  $end ,  $i ) {            if  ( $begin  ==  $end ) {                return   $arr [ $begin ];           }              $q  = randomized_partition( $arr ,  $begin ,  $end );            $k  =  $q  -  $begin  + 1; #k代表小于等于q的元素个数              if  ( $k  ==  $i ) { #如果k=i,说明q就是第i小的元素坐标                return   $arr [ $q ];           }  else   if  ( $i  <  $k ) { #如果i<k,说明第i小的元素位于q的左边                return  randomized_select( $arr ,  $begin ,  $q  - 1,  $i );           }  else  { #第i小的元素位于q的右边,此时查找右边的第i-k小的元素                return  randomized_select( $arr ,  $q  + 1,  $end ,  $i  -  $k );           }       }          $arr  =  array (1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11);        $t  = randomized_select( $arr , 0,  count ( $arr ) - 1, 8);       print_r( "The 8th minimum element: {$t}" );        echo   "<br>" ;       quick_sort( $arr , 0,  count ( $arr ) - 1);       print_r( $arr );   ?>

查看更多关于php查找数组元素各种方法总结 - php数组的详细内容...

  阅读:124次