PHP数组

  • 一、数组概念
    • 1、概念
    • 2、数组分类
  • 二、数组处理
    • 1、使用arry()函数创建数组
    • 2、使用变量建立数组
    • 3、使用两个数组创建一个数组
    • 4、键名和键值操作
  • 三、数组的输出和遍历
    • 1、数组的输出
    • 2、函数的遍历
  • 四、数组的排序
    • 1、升序排序
    • 2、反序排序
    • 3、对多维数组排序
    • 4、对数组重新排序
  • 五、数组常用操作
    • 1、数组计算
    • 2、数组的合并与拆分
  • 六、预定义数组

一、数组概念

1、概念

数组是一组数据集合,它将数据按照一定的规则排列起来,形成一个可操作的整体。

2、数组分类

(1)数字索引数组
数组的键名(下标)由数字组成,默认从0开始,每个数字对应数组元素在数组中的位置。
(2)数字关联数组
键名(下标)可以由数字和字符串混合组成。

二、数组处理

1、使用arry()函数创建数组

//定义不带键名的数组
$array1=array(0,1,2,3);
//定义带键名的数组
$array2=array("name"=>"yt","age"=>"19");
//定义省略某些键名数组
$array3=array(1=>2,2=>4,5=>6,8,9);
//print_r()打印变量信息
print_r($array1);
print_r($array2);
print_r($array3);

//默认情况下0元素是数组的第一个元素

$array1=array("黄色","蓝色","黑色");
echo $array1[1];
$array2=array("a"=>5,"b"=>10,"c"=>15);
echo $array2["b"];

//count()和sizeof()获取数组元素个数

$array=array(1,2,3,6=>7,4,9);
echo count($array)."<br>";
echo sizeof($array);

补充:
如果定义两个完全一样的键名,则后面一个会覆盖前面一个。

2、使用变量建立数组

//compact()函数:把一个或多个变量、数组变成数组元素

$num =10;
$str ="string";
$array=array(1,2,3);

//使用变量名创建数组

$newarray= compact("num","str","array");
print_r($newarray);

//extract()函数:把数组中的单元转化为变量

$array=array("key1"=>1,"key2"=>2,"key3"=>3);
extract($array);
echo "$key1,$key2,$key3";

3、使用两个数组创建一个数组

//array_combine()函数使用两个数组创建另一个数组

$a=array('green','red','yellow');
$b=array('avocado','apple','banana');

//键名,键值

$c=array_combine($a,$b);
print_r($c);

(4)建立指定范围的数组
//range()函数自动建立一个值在指定范围的数组low high step

$array1=range(1,5);
$array2=range(2,10,2);
$array3=range('a','e');
print_r($array1);
print_r($array2);
print_r($array3);

(5)自动建立数组

$arr[0]="a";
$arr[1]="b";
$arr[2]="c";
print_r($arr);

4、键名和键值操作

(1)存在性检查
//array_key_exists()、in_array判断某键名、值是否存在()布尔类型

$array=array(1,2,3,5=>4,7=>5);
if(in_array(3,$array))echo "数组中存在值3";
if(array_key_exists(5,$array))echo "数组中存在键值5";
if (! in_array(6,$array))echo "数组中不存在值6";

(2)获取和输出

//array_keys()、array_value()获取数组中所有键名和键值,保存成一个新数组

$array=array("red"=>"红色","blue"=>"蓝色","yellow"=>"黄色");
$newarray1=array_keys($array);
$newarray2=array_values($array);
print_r($newarray1);
print_r($newarray2);

//key()获取当前单元键名(默认指针从0开始),end()内部指针指向最后一个单元,next()返回数组下一个单元的值(每使用一次指针向下移一位),prev()返回数组上一个单元的值(每使用一次指针向上移一位),reset()重置数组指针(指针指向第一个单元),each()返回当前键名和键值,指针向下移动一位(适用于遍历数组)。

$array=array("a"=>1,"b"=>2,"c"=>3,"d"=>4);
echo key($array);
next($array);
echo key($array);
next($array);
echo  key($array);

//list()数组中赋值给指定变量

$arr=array("红色","蓝色","白色");
list($red,$blue,$white)=$arr;
echo $red;
echo $blue;
echo $white;

三、数组的输出和遍历

1、数组的输出

数组中某一元素:print/echo
整个数组:print_r()函数

//二维数组输出
$str = array("办公应用"=>array("Word","Excel","Powerpoint"),"平面设计"=>array("m"=>"Photoshop","n"=>"CorelDRAW","o"=>"Illustrator"),"Web开发"=>array("PHP",8=>"ASP.NET","JSP"));
print_r($str);
//数组的遍历 1、while+lis+each
$arr=array(1,2,3,4,5,6);
while(list($key,$value)=each($arr))
{echo $value;
}

2、函数的遍历

//while循环遍历二维数组

$t_array=array(array("111","x1","x"),array("222","x2","xx"),array("333","x3","xxx")
);

//以表格的形式输出数组的值

echo "<table border='1'><tr><td>学号</td><td>姓名</td><td>专业</td></tr><tr>";
while (list($key,$value)=each($t_array))
{//将二维数组中的单个数组中的值用变量替换list($XH,$XM,$ZY)=$value;//输出变量的值echo "<tr><td>$XH</td><td>$XM</td><td>$ZY</td></tr>";
}
echo "</table>";

//for循环遍历数组

$arr = array("qq","ww","zz");
for ($i=0;$i<count($arr);$i++)
{$str=$arr[$i];echo "Her name is $str.<br>";
}

//使用foreach循环访问数组

$color =array("a"=>"red","blue","white");
foreach ($color  as $value) {echo $value."<br>";
}
foreach ($color as  $key=>$value)
{echo $key."=>".$value."<br>";
}
echo "<form method=post>";
for($i=1;$i<6;$i++)
{echo "学生".$i."的成绩:<input type=text name='stu[]'><br/>";
}
echo "<input type=submit name=bt value='提交'>";
echo "</from>";
if (isset($_POST['bt']))
{$sum=0;$k=0;$stu=$_POST['stu'];$num=count($stu);echo "您输入的成绩有:<br/>";foreach ($stu as $score){echo $score."<br/>";$sum =$sum+$score;if ($score<60){$sco[$k]=$score;$k++;}}echo "<br/>低于60分的成绩有:<br/>";for ($k=0;$k<count($sco);$k++)echo $sco[$k]."<br/>";$average=$sum/$num;echo "<br/> 平均分数:$average";
}

四、数组的排序

1、升序排序

//sort()按元素值低到高排序,成功返回true,反之。还可以删除原来键名,重新分配自动索引的键名

$array1=array("a"=>5,"x"=>3,5=>7,"c"=>1);
$array2=array(2=>"c",4=>"a",1=>"b");
if (sort($array1))print_r($array1);
elseecho "排序\$array1失败";
if (sort($array2))print_r($array2);
//asort()函数:对数组值进行升序排序(升序后数组还保持键名和值之间的联系)
$fruits=array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
print_r($fruits);
//ksort()函数对键名进行排序,排序后二者的关联不改变
$fruits=array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
print_r($fruits);

2、反序排序

//rsort()函数:数组中的值降序排列,键名修改为一维数字键名
//定义数组变量

$numbers=array(3,6,1,28,11,32,46);
echo "<br>数组排列前元素依次为:<br/>";
//使用foreach()遍历数组元素
foreach ($numbers as $a) {//输出数组元素echo $a."&nbsp;&nbsp;&nbsp;&nbsp;";
}
echo "<hr>";
sort($numbers);//升序排列数组元素
echo "<br>数组升序排序后元素依次为:<br/>";
foreach ( $numbers as $a) {echo $a."&nbsp;&nbsp;&nbsp;&nbsp;";
}
sort($numbers,SORT_STRING);//  把数组元素作为字符串类型升序排序
echo "<br>数组元素被作为字符串升序排序后依次为:<br/>";
foreach ($numbers as $a)
{echo $a."&nbsp;&nbsp;&nbsp;&nbsp;";
}
echo "<hr>";
rsort($numbers);
echo "<br>数组降序排序后元素依次为:<br/>";
foreach ($numbers as $a)
{echo $a."&nbsp;&nbsp;&nbsp;&nbsp;";
}

3、对多维数组排序

// array_multisort()可以一次对多维数组排序;字符串键名保持不变,数字键名会被重新索引。
//SORT_ASC默认值:上升排序、SORT_DESC:下降排序;
//SORT_REGULAR默认值:按照通常的方法比较;SORT_NUMERIC:按照数值比较;SORT_STRING:按照字符串比较;

$arr1=array(3,5,2,4,1);
$arr2=array(8,6,9,7,10);
array_multisort($arr1,$arr2);
print_r($arr1);
echo "<br>";
print_r($arr2);
//多维数组排序
//初始化一个二维数组
$ar=array(array("10",11,100,100,"a"),array(1,2,"2",3,1)
);
array_multisort($ar[0],SORT_ASC,SORT_STRING,$ar[1],SORT_NUMERIC,SORT_DESC);
var_dump($ar);

4、对数组重新排序

//shuffle()函数:把数组用随机的顺序排序,删除原有的键名,建立自动索引。
//产生有序数组

$arr=range(1,10);
foreach ($arr as $value) {echo $value."";
}
echo "<br/>";
//打乱数组顺序
shuffle($arr);
foreach ($arr as $value) {echo $value."<br/>";
}
//array_reverse()函数:把一个数组单元按相反顺序排序
$array=array("a"=>1,2,3,4);
$arr1=array_reverse($array);
$arr2=array_reverse($array,true);
print_r($arr1);
print_r($arr2);
//自然排序
//natsort()
$array1=$array2=array("img12","img10","img2","img1");
sort($array1);
print_r($array1);
natsort($array2);
print_r($array2);

五、数组常用操作

1、数组计算

//计算元素个数:count()、sizeof()
//计算一个值出现的次数:array_count_value()

$arr = array(1,3,2,1,2,3,45,6,7,72,3);
$result=array_count_values($arr);
print_r($result);

//array_product()计算数组中所有值的乘积

$a=array(1,2,3,1);
echo "product(a)=".array_product($a)."\n";

2、数组的合并与拆分

(1)合并一个或多个数组:array_merge( a r r a y , . . . ) ( 2 )从数组中取出一段序列: a r r a y s l i c e ( array,...) (2)从数组中取出一段序列:array_slice( array,...)(2)从数组中取出一段序列:arrays​lice(array,…)
(3)将数组中的选定元素用其它元素替代:array_splice($array,…)

六、预定义数组

PHP语法基础4.1相关推荐

  1. Java基础笔记(入门,语法基础,流程控制,数组)

    Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...

  2. 给Java初学者福利——Java语法基础

    Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注: 1.Java ...

  3. python语法基础知识总结-python语法基础知识

    一.数字类型及操作 1.整数类型 可正可负,无取值范围限制pow(x,y):计算x^y 2.浮点数类型 存在不确定尾数round(x,d):对x四舍五入,d为小数截取位数e/E:a*10^b 3.复数 ...

  4. VRML语法基础跟简介

    VRML语法基础和简介 VRML简介和基础语法 -------------------------------------------- 一.VRML是什么 VRML是虚拟现实造型语言 (Virtua ...

  5. Web开发(一)·期末不挂之第四章·CSS语法基础(CSS选择器选择器优先级各类样式表的使用方法)

    CSS语法基础 一.单纯html控制样式的缺点 二. CSS✪✪✪ CSS概述 CSS基础语法 组成 选择器 标签选择器 类选择器 id选择器 通配选择器 后代选择器 插入样式表的三种方式 行内样式 ...

  6. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. java的基础语法是什么_java语法基础

    java语法基础 引导语:作为一门计算机语言,Java也是有语法的,以下是百分网小编分享给大家的java语法基础,欢迎阅读! java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词. 保 ...

  8. HDLBits答案(1)_Verilog语法基础

    HDLBits_Verilog语法基础 线信号 与物理电线不同,Verilog中的线信号(和其他信号)是"方向性的".这意味着信息只向一个方向流动,从驱动程序流向接收器.在Veri ...

  9. java的封装性_Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)--java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

  10. python创建和控制的实体称为_Python语法基础

    Python语法基础 数据对象和组织 对现实世界实体和概念的抽象 简单类型(表示):整数-int.浮点数-float.复数-complex.逻辑值-bool.字符串-str 容器类型(组织):列表-l ...

最新文章

  1. HDU1053 Entropy 哈夫曼树
  2. python设计模式(十三):解释器模式
  3. 删除时存在依赖_从一次线上故障来看redis删除机制
  4. oracle11g安装补丁升级
  5. 通过一个图来简单描述一下 socket 链接建立以及通信的模型
  6. 搭建 springMVC 框架
  7. php用a什么软件来下载,AMQB官方PHP库
  8. nginx负载均衡配置-windows
  9. 如何优雅地管理C++ 中的内存
  10. 从零实现SpringBoot简易读写分离,也不难嘛!
  11. 使用bind构建本地简易dns服务器
  12. ipsec说明以及隧道案例
  13. selenium测试(Java)-- 显式等待(九)
  14. MVC---张国亮总结心得第一季
  15. 通常学校计算机实验室中的网络属于,增霸卡在学校计算机实验室维护中的应用研究...
  16. Spring3第一天
  17. 快捷指令 python_有没有硬核的iOS快捷指令推荐(实用性)?
  18. IAR9.10下载(2021-02-23)
  19. C-51 STC89Cxx 系列 16X16 LED点阵屏
  20. 固态硬盘是什么接口_今天说事儿—固态硬盘接口,防你入坑

热门文章

  1. mysql 想在某个时间上再加上一段时间
  2. Unity 交通系统
  3. VirtualBox找不到桥接网卡问题解决
  4. 锐龙R7 PRO 6860Z怎么样 相当于什么水平级别
  5. 每日java笔试五小题 2020-9-23
  6. 在Ubuntu Linux终端安裝和使用ChatGPT,原来这么简单!
  7. Linux 安装并搭建 3.10.7 RabbmitMQ 集群之搭建RabbitMq服务器(一)
  8. PS/2接口鼠标滚轮不能用的解决办法
  9. mac上最好用的在线视频播放器:IINA+ for Mac
  10. 3.设计模式之分层思维:为什么要做代码分层架构?