数组内存分析
数组在内存中的存在形式。
foreach内存分析
php二维数组
php中只有一维数组,没有理论上的二维数组。
php的二维数组:指的是在数组元素值出现的位置上,刚好又出现了一个数组
$arr = array( 0 =>array(0 =>1),1 => array(0 => 2))
$arr[0] //访问一维数组元素
$arr[0][0]//访问二维数组元素
遍历二维数组
通常二维数组都是进行一层foreach遍历,一维数组是不需要遍历的,直接通过下标访问。
each函数
each是一个专门对数组进行数据获取的函数,获取当前数组指针所指向的元素的数据,并将当前指针所指向的数据,通过一个混合数组返回,返回4个元素,将原来的键名和键值各生成一个索引(0和1)和一个关联(key和value)
each操作完数组元素之后一定会将数组指针下移。
echo如果对应操作的数组指针已经移出数组,那么就会返回false
证明foreach是通过指针对数据进行操作
each遍历数组
list结构
list 是一种能够从别的数组中获取指定的元素的结构,会将获取到的数据挨个的分配到自己指定的变量当中
语法
list(变量1,变量2….) = 数组(元素1,元素2…) =====è 变量1 = 元素1;变量2 = 元素2….
list结构要使用,必须满足以下特点
1. 被获取的数组元素,必须要有索引元素,而且索引必须从0开始,而且索引必须连续顺序递增
2. list结构内的变量不能超过被获取数组中的元素个数(有效元素)
数组函数
key:获取当前数组当前指针所指向的元素的下标
current:获取的当前指针指向元素的数值
next:获取下一个元素的值,并且将指针下移
prev:获取上一个元素的值,并且将指针上移
end :将指针移到数组的最后一个元素,并返回最终指针位置的值
reset:将指针移到数组的第一个元素,返回最终指针位置的值
array_keys:获取一个数组的所有键名,返回一个索引数组
array_values:获取一个数组的所有值,返回一个索引数组
使用函数遍历数组
key,current和next
next或者prev如果将指针移出了数组,key得到的是NULL,而current返回的false
一旦数组指针移出数组,那么使用next和prev都不能将指针移回来,只能通过reset和end
函数循环遍历数组
for循环遍历关联数组
作业:
1. 有多少种方式可以遍历数组?每种方式都遍历一次数组。
数据结构模拟函数
数据结构:数据在内存中存在以及处理的方式
栈:先进后出(FILO)
队列:先进先出(FIFO)
以下四个函数:都是对数组本身进行操作
array_shift:从数组的前面弹出元素,得到元素的值
array_unshift:从数组的前面压入元素,得到当前数组元素的个数
array_push:从数组的后面压入元素,得到当前数组元素的个数
array_pop:从数组的后面弹出元素,获得元素的值
模拟栈
栈:出栈和入栈(压栈)
出栈:array_pop
入栈:array_push
模拟队列
入队:array_push
出队:array_shift