今天开始学PHP-关于数组

数组的概念

数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据。

数组定义语法
在PHP中系统提供多种定义数组的方式:

1、 使用array关键字:最常用的
$变量 = array(元素1,元素2,元素3…);
在这里插入图片描述
2、 可以使用中括号来包裹数据:
$变量 = [元素1,元素2…];
在这里插入图片描述
3、 隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量[] = 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始)
$变量[下标] = 值; //中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相似
在这里插入图片描述

PHP数组特点

1) 可以整数下标或者字符串下标
如果数组下标都为整数:索引数组
如果数组下标都为字符串:关联数组
2) 不同下标可以混合存在:混合数组
3) 数组元素的顺序以放入顺序为准,跟下标无关
在这里插入图片描述
4) 数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始
5) 特殊值下标的自动转换
布尔值:true和false
空:NULL
在这里插入图片描述
6) PHP中数组元素没有类型限制
7) PHP中数组元素没有长度限制

补充:PHP中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。

多维数组

多维数组:数组里面的元素又是数组
二维数组
二维数组:数组中所有的元素都是一维数组
在这里插入图片描述
多维数组
在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组)

但是:不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。
异形数组(不规则数组)
异形数组:数组中的元素不规则,有普通基本变量也有数组。
在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)
数组遍历
遍历的基本含义
数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据都需要依次输出出来,就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素。
a r r = a r r a y ( 0 = > a r r a y ( ‘ n a m e ’ = > ‘ T o m ’ ) , 1 = > a r r a y ( ‘ n a m e ’ = > ‘ J i m ’ ) ) ; / / 二 维 数 组 / / 访 问 一 维 元 素 : arr = array(0=>array(‘name’ => ‘Tom’),1=>array(‘name’ => ‘Jim’)); //二维数组 //访问一维元素: arr=array(0=>array(name=>Tom),1=>array(name=>Jim));////访arr[一维下标]
$arr[0]; //结果:array(‘name’ => ‘Tom’);

//访问二维元素:$arr[一维下标][二维下标
$arr[1][‘name’]; //Jim

Foreach遍历语法
基本语法如下:
Foreach( 数 组 变 量 a s [ 数组变量 as [ as[下标 =>] KaTeX parse error: Expected '}', got 'EOF' at end of input: 值){ //通过下标访问元素的下标;通过$值访问元素的值
}
通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值
在这里插入图片描述
获取下标
在这里插入图片描述
在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。
在这里插入图片描述
Foreach遍历原理

Foreach遍历的原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。

Foreach($arr as $k => $v){
//循环体
}

1、 foreach会重置指针:让指针指向第一个元素;
2、 进入foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量 k 中 ( 如 果 存 在 ) , 将 值 取 出 来 放 到 对 应 的 值 变 量 k中(如果存在),将值取出来放到对应的值变量 kv中;(指针下移)
3、 进入到循环内部(循环体),开始执行;
4、 重复2和3,直到在2的时候遇到指针取不到内容(指针指向数组最后)

数组遍历

For循环遍历数组
For循环:基于已知边界条件(起始和结束)然后有条件的变化(规律)
因此:for循环遍历数组有对应条件
1、 获取数组长度:count(数组)得到数组元素的长度
2、 要求数组元素的下标是规律的数字
在这里插入图片描述
While配合each和list遍历数组
While是在外部定义边界条件,如果要实现可以和for循环一样。

Each函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
0下标 – 》 取得元素的下标值
1下标 - 》 取得元素的值
Key下标 – 》取得元素的下标值
Value下标 – 》取得元素的值
在这里插入图片描述
如果each取不到结果(数组指针移动到最后),返回false
在这里插入图片描述
List函数使用:list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量当中(批量为变量赋值:值来源于数组):list必须从索引数组中去获取数据,而且必须从0开始。
正确操作:
在这里插入图片描述
错误操作:变量多于数组元素,没有指定从0到指定变量的下标的数组元素。因为$second变量对应的下标是1,但是数组中没有下标是1
在这里插入图片描述
List与each配合特别好:each一定有两个元素就是0和1下标元素
List(变量1,变量2) = each(数组); //是一种赋值运算,但是可以得到false结果(each取不到正确的结果),整个表达式为false
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值