php查找数组元素各种方法总结
发布:smiling 来源: PHP粉丝网 添加日期:2014-01-06 22:00:20 浏览: 评论:0
在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);
- ?>
Tags: 查找 数组 元素
- 上一篇:php数组删除元素各种方法总结
- 下一篇:php 数组排序各种方法总结
相关文章
- ·php 查找数组中是否在指定内容(2014-05-30)
- ·php 查找数组键名并输出值(2014-08-16)
- ·PHP的数组中提高元素查找与元素去重的效率的技巧解析(2019-12-03)
- ·php数组查找函数总结(2021-04-26)
- ·php在数组中查找指定值的方法(2021-05-16)
- ·PHP查找数值数组中不重复最大和最小的10个数的方法(2021-05-22)
- ·php使用array_search函数实现数组查找的方法(2021-05-28)
- ·PHP查找与搜索数组元素方法总结(2021-05-28)
- ·php数组比较实现查找连续数的方法(2021-06-14)
- ·php实现在多维数组中查找特定value的方法(2021-06-14)
- ·PHP的数组中提高元素查找与元素去重的效率的技巧解析(2021-07-12)
- ·PHP实现二维数组中的查找算法小结(2021-09-25)
- ·PHP中数组定义的几种方法(2013-11-13)
- ·php学习笔记 [预定义数组(超全局数组)](2013-11-13)
- ·php session 预定义数组(2013-11-13)
- ·PHP 数组教程 定义数组(2013-11-13)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)