后端开发|php教程
php,查找,数组,元素,各种,方法,在,php,中,数据查询,可以,分类,一维,数组,查找,与,多维,查,找了,
后端开发-php教程
在php中数据查询可以分类一维数组查找,与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array ,array_search 与遍历来实例了,如果是多维数组就需要使用其它办法。
易语言改电脑密码源码,vscode2077,ubuntu断电开不了机,tomcat 频繁启动,sqlite 3存储过程,dede excel插件,前端主流技术框架学习,爬虫js怎么抓取,php 释放变量,seo sem培训,cms美食网站模板,鼠标滚轮缩放网页,discuz户外模板,提示跳转页面模板,华科企业网站管理系统,京东怎么用白条在微信小程序里lzw
对于一维数组我们可以如下操作
htmldiv车源码,ubuntu小游戏下载,爬虫抓取消息,php方法,seo实例视频lzw
in_array ‘函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
墨香登陆器源码,怎么使用vscode写笔记,ubuntu终端在,tomcat打开超过45,app爬虫原理,php 强制整形,宝安seo优化多少钱,一元购商城网站源码,织梦商业模板下载lzw
array_key_exists ‘array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。array_key_exists(key,array)
array_search ‘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 = $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 “ “; quick_sort($arr, 0, count($arr) – 1); print_r($arr); ?> |
http://www.liuzhongwei.com/PHPjc/631562.htmlwww.liuzhongwei.comtruehttp://www.liuzhongwei.com/PHPjc/631562.htmlTechArticle在php中数据查询可以分类一维数组查找,与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array ,array_search 与遍历来实例了,如…