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数组的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did31190