php的数组、排序、查找
//创建数组,其值可以放任意的数据类型
$arr[0]=111;
$arr[1]=121;
$arr[2]="nihao";
$arr[3]=141.9;
$arr[4]=null;//null要记入长度,并要占用空间,但是不会输出
echo "数组长度".count($arr);
//遍历数组中的值
for($i=0;$i<count($arr);$i++){
echo "<br/>".$arr[$i];
}- 创建数组的第二种方式
$arr=array('hello','niho',12.3,1);
//遍历数组中的值
for($i=0;$i<count($arr);$i++){
echo "<br/>".$arr[$i];
}
创建数组的第三种方式 【键值的方式】 (在默认情况下,我们的元素下标是从0开始的,但是也可以自己定义) 案例如下:
$arr['logo']="成都";
$arr['add']=123;
...
或者
$arr=array("logo"=>"成都","add"=>123,4=>23); 测试如下:
$arr=array("logo"=>"成都","add"=>123,4=>23);
//遍历数组中的值,foreach这种循环可用于对数组键值对的方式的遍历,也可以用于其他任何方式的数组遍历,foreach可以广泛运用
foreach($arr as $val){
echo $val;//$val['key']可以得到值对应的键
}
foreach($arr as $key => $value){
echo $key.":".$value;
- } $a=array(); 利用foreach($arr as $key => $value){$a[]=$key//向数组a中按照下表0开始赋值}
while循环遍历值
$i=0;
while($i<count($arr)){
echo "数组值".$arr[$i]."<br/>";//echo "$arr[$i]";这在变量上加了一个双引号也是可以打印出值的,但是单引号就会把其当成字符串来打印
$i++;
}
$arr[true]='hello';
alert($arr[1]);//$arr[1]等价于$arr[true];
$arr[null]=123;等价于$arr[""]=123;
- 我们通常使用print_r()和var_dump()来查看数组的情况 print_r($arr);//Array ( [0] => hello [1] => niho [2] => 12.3 [3] => 1 ) var_dump($arr);//array(4) { [0]=> string(5) "hello" [1]=> string(4) "niho" [2]=> float(12.3) [3]=> int(1) }
- 在php中数组的长度是可以自动增长的 案例:
$arr=array(1,2);
$arr[2]="zenjia";//自动给该数组分配了一个空间
echo $arr[2]; php数组中几个重要的函数 1.count(); //统计数组的长度 2.is_array() //判断一个变量是否是数组 3.print_r()和var_dump(),上面已经注明过了 4.explode()//拆分字符串,例如$arr=explode(",","a,b,c,d");测试:print_r($arr);
删除某个数组的键-值对 unset()用于销毁指定变量 ,例如删除一个数组中下标为0的元素,unset($arr[0]); 如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。unset详解请看php手册
数组的排序 ①冒泡排序
<?php
function maoPaoSort(&$arr){//红色的符号表示该变量为引用变量,如果没有&这个符号,传过来的数组就会是将传递的数组复制了一个(是另外一个对象,地址不同了,所以你在外层输出的时候,还是未排序的那个数组,在函数里面输出的数组才是排序好了的)
$temp=0; $flag=false;
for($i=0;$i<count($arr)-1;$i++){//count($arr)-1意思是排序好了一个数,就少循环一次for($j=0;$j<count($arr)-1-$i;$j++){//-$i为了不把经过一次筛选之后排好的数放入下一次排序中
//如果前面的数大于后面的数,就要改变两个数的位置
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];//将大的数先预留在这个变量中
$arr[$j]=$arr[$j+1];//将小的数放在大的数的位置
$arr[$j+1]=$temp;//再将预留的大的数放在小的数的位置}
}
if(!$flag){//说明已经是有序的了,就不用到第二层循环了,提高代码的执行效率
break;
}
$flag=false;}
}$myarr=array(5,0,-1,-100,4444);
maoPaoSort($myarr);
print_r($myarr);
?>②选择排序
<?php
function chooseSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){//假设当前的值是最小值
$minValue=$arr[$i];
//记录我认为最小值的下标
$minIndex=$i;for($j=$i+1;$j<count($arr);$j++){//与第二个数进行比较
//如果我认为的最小值大于了第二个数,说明我上面的假设不成立
if($minValue>$arr[$j]){
$minIndex=$j;
}
}
//然后进行交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}}
$myarr=array(5,0,-1,-100,4444);
chooseSort($myarr);
print_r($myarr);?>
③插入排序
<?php
function chaRuSort(&$arr){
//默认下标为0的数已经是有序的了
for($i=1;$i<count($arr);$i++){//所以要从下标为1的数开始比较
//准备要插入的数
$addValue=$arr[$i];
//准备要比较的数的下标
$addIndex=$i-1;
//如果这些条件满足,说明我们还没有找到数字的正确位置
while($addIndex>=0&&$addValue<$arr[$addIndex]){$arr[$addIndex+1]=$arr[$addIndex];//将大的数往后挪一位
$addIndex--;//再和前一个数做比较,以此类推放值
}//如果不满足while中的条件就将有序的数插入数组中
$arr[$addIndex+1]=$addValue;}
}
$myarr=array(5,0,-1,-100,4444);
chaRuSort($myarr);
print_r($myarr);?>
④快速排序
- 查找 ❶顺序查找
<?php
function search(&$arr,$findValue){
$flag=false; //用标志确定是否查找到想要的值
for($i=0;$i<count($arr);$i++){
if($arr[$i]==$findValue){
echo "我要查找数的下标是:".$i."<br/>";
$flag=true;
//break;
}
}if(!$flag){
echo "找不到你想要查找的数:".$findValue;
}}
$myarr=array(12,34,34,5940);
search($myarr,4);?>
❷二分查找
<?php
function binarySearch(&$arr,$findValue,$leftIndex,$rightIndex){
//中间数的下标
$centerIndex=($leftIndex+$rightIndex)/2;
if($leftIndex>$rightIndex){echo "找不到$findValue";
}
if($findValue>$arr[$centerIndex]){
binarySearch(&$arr,$findValue,$centerIndex+1,$rightIndex);//递归调用}else if($findValue<$arr[$centerIndex]){
binarySearch(&$arr,$findValue,$leftIndex,$centerIndex-1);
}else{
echo "要找的数的下标是$centerIndex";}
}
$myarr=array(12,34,35,36,59,90);
binarySearch($myarr,34,0,count($myarr));?>
转载于:https://www.cnblogs.com/tangyue/p/3725957.html
php的数组、排序、查找相关推荐
- 数组 排序 查找 多维数组
1 什么是数组 数组可以存放多个同一类型的数据 1数据类型 数组名[]= new 数据类型[大小] int a[] = new int[5] 2 先声明数组,后赋 ...
- 算法----- 在排序数组中查找元素的第一个和最后一个位置
题目: 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log ...
- 100题_10 在排序数组中查找和为给定值的两个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可. 例如输入数组1.2 ...
- LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 I 思路一:二分单边 + 线性扫描 先用一次二分查找找到边界,再再边界里面寻找目标值 class Solution {public:int se ...
- python 在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- 6、leetcode34 在排序数组中查找元素的第一个位置和最后一个位置**
leetcode34 在排序数组中查找元素的第一个位置和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存 ...
- 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
第 14 题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意 ...
- leetcode(34)在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...
- 34. 在排序数组中查找元素的第一个和最后一个位置 golang
34. 在排序数组中查找元素的第一个和最后一个位置 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-i ...
最新文章
- Intel Optane PMEM 概览
- 【Java】判断字符串是否含字母
- 跨浏览器的元素的竖直排列
- Android Stduio 发生 Process ‘command ‘somePath:java.exe‘‘ finished with non-zero exit value 2 异常的解决办法
- python模块安装
- 怎么高速旋转_洗衣机怎么选比较好,滚筒洗衣机和波轮洗衣机哪种更好?
- centos mysql源_CentOS 使用国内源安装 MySQL
- 沟通:如何用沟通解决80%的工作问题?
- 手机连WIFI显示【正在获取IP】地址解决办法
- USB OVER Network的使用(共享usb端口)
- 常见电机分类和驱动原理动画
- 教你怎么从Java8升级到Java11
- 数字多媒体处理系统(multimedia)相关概念整理
- 中国软件开发工程师之痛 by 李云~
- 2012年9月开学季CSDN高校俱乐部专家巡讲讲师招募
- php重启后卡顿,电脑突然卡顿严重
- (莱昂氏unix源代码分析导读-47) exec
- Flask源码阅读-第四篇(flask\app.py)
- (二十四)优秀员工 - 8
- 基于libVLC的参数设置可视化视频播放器