复习:
匿名函数use用法:将外部和匿名函数处于同一级的变量引用到匿名函数的内部,引用的变量和外部的变量是一个值传递的关系。如果需要引用传址,则在usb变量前加&符号
迭代
单单从思想的角度上看,递归和迭代没有谁优谁劣,都是一样的,就和大家偏文科偏理科一样,但是,从代码的角度上来看,无疑是迭代的思想更加具有效率,所以建议大家以后去多用迭代的思想去解决问题。
数组
不是所有关联数组都是字符串下标$arr = array(1110=>'刘德华',1111=>'金城武');
不是所有数组都是整形下标$arr = array('a'=>'雪碧','b'=>'可乐','c'=>'王老吉');
foreach 遍历数组
语法:foreach(需要遍历数组的名称 as 数组的键 => 数组的值){ }
语法:foreach(需要遍历数组的名称 as 数组的值){ }
注意:
foreach遍历数组的时候,数组的指针会自动的下移。
foreach遍历完数组以后,指针会指向一个非法的位置
foreach在遍历数组之前,会现对数组做一个初始化的操作
foreach遍历数组,实际是遍历数组的拷贝值,改变原数组的结果,不会影响到遍历数组的结果,foreach遍历数组,如果改变$value的值,原数组不会发生变化
1 | foreach($arr as $key => $value){ |
foreach遍历数组同样支持引用传值,改变$value的值,原数组也会随之发生变化。
1 | foreach($arr as &$value){ |
foreach遍历完数组以后,下标是一个不确定的情况,如果foreach遍历完以后需要使用数组,最好将他做一个初始化的操作。
指针 遍历数组
通过移动数组的指针,完成一个遍历数组的情况,指针指向的位置一般是分为一个合法位和非法位
next($arr) : 让指针下移一位–>指针下移
current($arr): 获取指针指向当前元素的值–>获取当前值
key($arr) : 获取指针指向当前元素的下标–>获取当前元素下标
for(;current($arr);next($arr)){
echo “数组元素的下标为:”.key($arr).’
‘;
echo “数组元素的值为:”.current($arr).’
‘;
}
prev() : 让数组的指针上移一位。
上移指针和下移指针是相对于现在的位置而言,所以一旦指针处于一个非法位置,没有参照物了,指针无论上移还是下移都是非法位
reset() : 初始化指针。
end() : 将数组指针指向数组的最后一个元素。
reset()和end()理解成相当于一个绝对路径的概念,我不需要管数组指针当前指向的位置,直接将数组指针指向第一个元素或者最后一个元素
each() :返回一个四个元素的数组,其中1和value代表当前数组指向的值,0和key指向当前数组的下标。并且他会让数组的指针下移一位
while+each+list 遍历数组
each可以获取元素的值,下标和下移指针,所以直接和while配合,就可以遍历数组
方法一
1 | while($element = each($arr)){ |
方法二
1 | while(list($key,$value)=each($arr)){ |
list() : list可以将数组里面的值赋值给一个变量
each获取的是一个数组类型的变量,所以可以利用list将数组的值获取出来
3种遍历数组的方式,for(),foreach(),while+each+list的方式,以后工作中90%的人基本上用的都是foreach,9%都会使用while+each+list的方法,for基本上没有人使用
关于赋值的指针问题
1 | $arr=array(‘a’,’b’,’c’,’d’); |
1 | $arr=array(‘a’,’b’,’c’,’d’); |
1 | $arr=array('a','b','c','d'); |
1 | $arr=array('a','b','c','d'); |
COW 写时复制
如果将一个变量赋值给另一个变量,不会立刻去开辟一个空间,只有当变量进行写操作的时候,才会给他开辟一个空间。
memory_get_usage() 获取文件占用空间的大小。
array_fill(开始下标,添加元素的数量,默认值)
shuffle() - 将数组打乱
array_fill() - 用给定的值填充数组
在foreach里面对原数组进行写操作时,复制的数组才开辟了一块空间
1 | header("content-type:text/html;charset=utf-8"); |
1 | header("content-type:text/html;charset=utf-8"); |
1 | header("content-type:text/html;charset=utf-8"); |
1 | $arr=array('可乐','雪碧','王老吉'); |
1 | header("content-type:text/html;charset=utf-8"); |
foreach变量数组总结
先复制后移动,原始数组保持指针不变
先移动后复制,复制的数组会将指针也复制了
指针处于非法位置时,进行复制,先查看哪个数组,哪个就先被初始化
关于数组的几个函数
range(初始值,结束值)$arr = range(1,10);
array_merge(数组1,数组2)$arr = array_merge(range(0,9),range('a','z'));
array_merge如果合并两个数字下标的数组,会将数字重新从0进行组合。
array_merge如果合并两个字符串下标的数组,后面的值会将前面的值覆盖。
array_merge合并两个数组,先从第一个数组开始合并,然后在合并第二个数组。
array_rand(数组,个数);
随机获取一个数组的下标
array_rand获取的是元素的下标,如果只获取一个元素下标,则是以普通数据类型进行存储,如果获取多个下标,则以数组的模式进行存储。
虽然array_rand是随机获取下标的,但是他获取多个下标的时候会从小到大排序
shuffle()
可以打乱一个数组的元素
返回值是bool(true),
随机验证码
1 | $arr = array_merge(range(0,9),range('a','z'),range('A','Z')); |
补充:
memory_get_usage() 获取当前文件占用空间的大小;
array_fill(0,10,’uiste’); 0开始下标,10是元素个数,uiste是每个元素的内容