学习目标 1. 了解数组的概念 2. 掌握定义、创建数组的方法 3. 掌握获取、输出数组元素的方法 4. 掌握遍历数组元素的方法 5. 掌握数组的合并、反转、排序数组的元素
什么是PHP数组? 是一个可以存储一组或一系列数值的变量。在PHP中数组的元素分为两个部分,分别为键(key)和值(value)。其中“键”为元素的识别名称,也可以称为数组的下标,“值”为元素的内容。“键”和“值”之间存在一种对应关系,成为映射。
数组的变量可以是一维的,可以是二维的,或者是更多维数组,其中的元素也很自由,可以是字符串,整形,浮点型,布尔型,也可以是数组或则是对象。
PHP同时还是支持以数字为下标的索引数组和以字符串为下标的关联数组,这二者虽然没有什么区别,但也算的是PHP和其他语言特别的地方之一。
在PHP中,可以使用list(),array()函数来创建数组,也可以直接进行赋值。
什么是索引数组?
是值下标为整数的数组。索引数组的下标是从0开始的,并且是依次递增的。
什么是关联数组?
是指下标为字符串的数组,它的键和值之间有一定的业务逻辑关系,所以,通常使用关联数组存储一系列具有逻辑关系的变量。
注意:元素数组的下标只有整型和字符串两种类型,如果是其他类型,则会进行类型转换。
PHP的数组是一个关键字或值的集合(值可以是任何一种类型,包括另一个数组)
使用array来创建一个数组:
格式:array(key=>value,key=>value....)
举个例子:
$arr =array(3,4,5,6);//索引数组
$arr = array("id"=>2,"title"=>3)//关联数组
- //显示创建数组
- $test = array(0=>"test1",1=>"test2",2=>"test3");
- echo $test[0]."";
- echo $test[1]."";
- echo $test[2]."";
- ?>
运行结果:
test1
test2
test3
访问数组:$数组名[键名]
除了可以使用方括号[]访问元素还可以使用{}。
PHP提供了print_r()和var_dump()函数,用于输出数组中的所有元素。其中,print_r()函数可以按照一定的格式显示数组中所有元素的键和值。
- //非显示创建数组
- //第一步我们想使用显示创建数组
- $user = array(0=>"user1",1=>"user2");
- //输出user1
- echo $user[0]."";
- //输出user2
- echo $user[1]."";
-
- //采用方括号的方式向数组添加user3
- $user[2] = "user3";
- //输出user3
- echo $user[2]."";
-
- //向user数组中添加user4,让他自动产生索引
- $user[] = "user4";
- print_r($user);
- /**
- * AArray ( [0] => user1 [1] => user2 [2] => user3 [3] => user4 )
- * 我们从输出的结果可以看到user4自动产生了一个索引值为3
- */
- ?>
输出结果
user1
user2
user3
Array ( [0] => user1 [1] => user2 [2] => user3 [3] => user4 )
总结:如果定义数组的时候没有给某个元素指定下标,PHP就会自动把目前最大的那个整数下标值加1,最为该元素的下标,并且依次递增后面元素的下标值。
使用[]来修改数组
格式:$arr[] =value;
- $className = array("a"=>"php课程","b"=>"java课程","c"=>"MySQL课程");
- echo "没有改变值的数组"."";
- print_r($className);
- echo "";
- $className[0]="深入了解php"."";
- $className[1]="深入了解JAVA"."";
- $className[2]="深入了解php"."";
- //在php中可以使用print_r来输出数组。
- echo "改变值后的数组"."";
- print_r($className);
- ?>
没有改变值的数组
Array ( [a] => php课程 [b] => java课程 [c] => MySQL课程 )
改变值后的数组
Array ( [a] => php课程 [b] => java课程 [c] => MySQL课程 [0] => 深入了解php
[1] => 深入了解JAVA
[2] => 深入了解php
)
- //创建多维数组
- $user=array(
- "学号"=>array("1","2"),
- "姓名"=>array("张三","李四")
- );
- //打印第二个学号
- echo "第二个学号".$user["学号"][1];
- //第二个学号2
- ?>
函数名 | 作用 |
---|---|
count() | 统计数组的条数 |
is_array() | 判断是否是数组(返回true 和 false) |
explode("key","value") | 另一种创建数组的函数 |
unset() | 删除元素或者数组 |
array_unique() | 移除数组中的重复元素,获取一个新的数组 |
array_search() | 获取数组中元素对应的键名 |
array_keys() | 获取数组中元素对应的键名,同时可以返回所有匹配的键名 |
sort() | 对数组中的元素按照由小到大的顺序进行排序 |
数组指针用于指向数组中的某个元素,默认指向数组的第一个元素。需要注意的是一个数组只能有一个数组指针。为了方便数组操作,PHP内置了一些数组指针函数
函数名 | 作用 |
---|---|
mixed current (array & $array) | 获取数组中当前元素的值,如果内部指针超出数组的末端,则返回false |
mixed key (array & $array) | 获取当前元素的下标,即键名 |
mixed next(array & $array) | 将数组的内部指针向前移动一位 |
mixed prev(array & $array) | 将数组的内部指针倒回一位 |
mixed end(array & $array) | 将数组的内部指针指向最后一个元素 |
mixed reset(array & $array) | 重置指针,即将数组的指针指向第一个元素 |
使用foreach遍历数组
遍历数组有很多种方法,可以使用for循环,while循环,最好用的还是foreach
格式一:键值对遍历
- foreach($arr as $key=>$value){
-
- .......
-
- }
格式二:无键名遍历
- foreach($arr as $value ){
-
- }
- //使用foreach遍历数组
- //定义一个数组
- $arr =array(
- "name"=>"张三",
- "age"=>18,
- "className"=>"软件工程1班",
- "性别"=>"男",
- );
-
- //无键名遍历
- foreach($arr as $value){
- echo $value;
- echo "";
- }
-
- //有键名遍历
- foreach($arr as $key=>$value){
- echo $key;
- echo "=>";
- echo $value;
- echo "";
-
- }
- ?>
运行结果
张三
18
软件工程1班
男
name=>张三
age=>18
className=>软件工程1班
性别=>男
注意:使用foreach遍历数组时,$key和$value只不过是一个变量名而已,任何符合语法的变量名均可,如$k和$v。$key和$value保存的数据是通过值传递的方式赋值的,这意味着对$key和$value的修改不影响数组本身。可以使用引用传递,在变量前加$就可以,但是要注意这种方式只对$value有效,$key不会改变。
- //使用while循环访问数组
- //解释:在while循环中list()和each()函数结合使用可以实现对数组的遍历,其中list()函数的作用是将数组的值赋值给变量
- $username = array("张三","李四","王五");
-
- //each函数的作用是返回当前的键名和值,并且将数组的指针向下移动一位
- /**
- * 注意:使用each会报错:The each() function is deprecated
- * 翻译一下:不推荐使用each()函数。 此消息将在以后不再显示
- * 原因:php7.2以上废除了each()方法,项目中用到的地方会出现以下报错
- * 所以不推荐使用while
- */
- while(list($key,$value)=each($username)){
- echo $key."";
- echo $value."";
- }
-
- /**
- * 注意 : 使用for循环只能访问 键名是有序的数组,如果是其他类型则无法访问
- */
- $age = array("11","22","33");
- for($i =0;$i<3;$i++){
- echo $age[$i]."";
- }
- ?>
注意:本文章是笔者自己学习的笔记,因为笔者的能力有限,所以会出现很多奇奇怪怪的问题,如果您在浏览或者运行代码的时候发现了问题,还请您在评论区留言,笔者在看到后会在第一时间解决,谢谢。