指针一旦处于非法位置,没有参照物了,无法上移和下移.但是可以end()和reset()
当一个数组复制的时候,指针也跟着复制,当指针在非法区域时,先输出谁,谁就先初始化,另一个非法
current():返回当前数组指针处元素的值,不移动指针
key():返回当前数组指针处元素的下标,不移动指针
next():返回下一个数组元素的值,并将指针下移一行
prev():返回上一个数组元素的值,并将指针回退一步
end():返回最后一个数组元素的值,并将指针移到数组最后一个元素
reset():返回第一个数组元素的值,并将指针移到第一个元素上
each():取一个数组的”当前单元”的下标和值(并放入一个数组),然后将指针移到下一个单元//是引用传递,改变each里面的值,原数组会发生改变
例:$arr4=array(1=>3,”a1”=>11,3=>5); $result1=each($arr4); $result2=each($arr4);
//$result1值为array(1=>3,value=>3,0=>1,key=>1);
//$result1值为array(1=>11,value=>11,0=>a1,key=>a1);
list():用于一次性取得从0开始的数字下标的多个单元的值,把这些值赋给一些变量
例如:list($变量1,$变量2,---)=$数组
遍历数组
for($i=0; $i<count($len); ++$i )
{$key=key($arr4); $value=current($arr4); echo “<br />$key=>$value”; next($arr4);}
while( list($key,$value)=each($arr) ) { echo “<br />$key=$value”; }
#### foreach循环
foreach($arr as \[$key => \] $value){---} 遍历过程中变量可以人为设定引用传递
foreach($arr as $key => &$value){…} 原数组也改变
遍历后,指针位置为null,对应值为bool(false)
foreach遍历的是拷贝之后的数组,在里面修改原数组,拷贝之后的数组没有发生改变.同理修改$value的值原数组没有发生改变
foreach里面操作修改是原数组中改变,比如unset,能把原数组删空,但是foreach还能遍历
foreach遍历中指针处于不确定状态,如果foreach后还要对指针操作,建议把指针初始化
#### 写时复制COW
copy on write
当一个变量复制另一个变量的时候,其实并没有直接去开辟一个空间,只有当其中一个变量进行写操作的时候,另一个变量才会去开辟空间。
##### 模拟计算机内存去演示写时复制
memory\_get\_usage(): 获取当前代码占用的计算机内存。
array\_fill(startnum,num,value): 创建一个数组元素,startnum代表开始第一个元素的下标,num代表数组中一共有多少个元素,value给所有元素统一赋值。
![Image](https://box.kancloud.cn/fb6680c77bc19eb2f6c1d045c397982f_1141x302.png)
例题:
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
}
var\_dump(current($arr));
//指针处于非法位置
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
$arr\[2\]='王';
}
var\_dump(current($arr));
//指针指向地
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
if($key==1){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指针指向王
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
if($key==2){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指针指向黄
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
if($key==3){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指针指向天
$arr=array('天','地','玄','黄');
foreach($arr as $key=>$value){
if($key==4){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指针指向false
- PHP
- 页面跳转
- 数据类型和运算符
- 整形
- 浮点型
- 字符串型
- 布尔型
- 判断数据类型
- 传值
- 类型转换
- 常量
- 进制转换
- 运算符
- 各种结构
- 数组
- 分类
- 创建
- 多维数组
- 数组操作函数
- 数组指针
- 排序
- 数组交换需要注意的
- 函数
- 创建函数
- 参数传递
- 参数数量问题
- 返回值
- 可变函数
- 匿名函数
- 冒泡,选择,二分
- 变量的作用域
- 局部作用域中使用全局
- use
- 有关函数的系统函数
- 递归
- 递推(迭代)
- 面向对象
- 类和对象
- 值传递
- 引用传递
- 成员
- 构造和析构调用上级同类方法
- 重写
- 最终类
- 最终方法
- 设计模式
- 抽象类
- 抽象方法
- 抽象类和抽象方法的细节
- 重载
- 接口
- 类和接口的总结
- 自动加载
- 克隆
- 对象的遍历
- 内置标准类
- 其他类型转对象类型
- 类型约束
- 魔术方法
- static关键字
- 命名空间
- 子级空间
- 引入机制
- 公共空间
- 使用注意
- 错误处理
- 错误的触发
- 错误报告的显示
- 错误日志的记录问题
- 自定义错误处理器
- 异常抛出
- 文件锁
- 文件处理
- 序列化与反序列化
- 目录操作
- 文件操作
- 文件上传
- $_FILFS
- 多文件上传处理
- 绘图技术
- 创建画布资源
- 操作画布
- 导出
- 销毁资源
- 验证码
- 补充文件居中
- 在图像上写入一行TTF字体的文本
- 获得图像相关信息
- 水印
- 等比例缩放
- 常见错误
- HTTP协议
- URL的构成
- 请求
- 防盗链
- 响应
- 使用header()禁用缓存
- 下载文件的HTTP响应头
- 文件下载
- HTTPS
- 会话技术
- cookie
- session
- PHP操作MySQL函数
- 登录
- 一些函数
- 从结果集中取出一行数据
- 获取行数,列数,字段名
- 安全
- 缓存
- 补充
- MySQL
- 语法
- 备份和恢复
- 注释
- 语句行
- 字符集
- 校验级
- 存储引擎
- 数据库操作
- 创建数据库
- 删除数据库
- 显示数据库
- 修改数据库
- 数据类型
- 整数类型
- 小数类型
- 日期时间型
- 字符和文本型
- enum类型
- set类型
- 时间类型
- 表操作
- 创建
- 索引
- 约束
- 表选项列表
- 表的其他语句
- 视图语法
- 增删改查
- 插入数据(增)
- 删除数据(删)
- 修改数据(改)
- 查询(查)
- 用户和权限管理
- 用户管理
- 权限管理
- PDO
- 与PDO相关的几个类
- 连接数据库
- 使用
- PDO的错误处理
- PDO结果集对象
- pdo结果集对象的常用方法
- PDO预处理
- 常用属性
- mysql编程
- 事务
- 语句块
- mysql中的变量
- (存储)函数
- 存储过程procedure
- 触发器(trigger)
- mysql优化
- 存储引擎
- 字段类型
- 逆范式
- 索引
- Memcache
- 与redis区别
- 安装
- php开启扩展
- php操作memcache
- Key的命名
- 有效期
- 各种数据类型存储
- 删除
- 第三个参数压缩作用
- 其他相关操作方法
- 终端命令操作方式
- 获取memcache统计信息
- Git
- 创建一个git仓库
- 添加
- 修改文件
- 删除文件
- 克隆
- 个人网站
- Ajax
- 发起请求
- 接受响应
- 常用属性和方法
- get和post
- get
- post
- 同步和异步
- 什么时候使用同步请求?
- 分页
- xml的接收和处理
- JSON
- 无刷新表单提交和进度条
- JQuery操作ajax
- iframe
- 邮件
- 介绍
- 发送邮件
- 直投邮件
- 中转邮件发送
- phpmailer
- 正则表达
- 简单使用
- preg_match()
- 正则内容
- 定义字符集
- 特别字符集
- 组合字符集
- 限制字符
- 模式修正符
- 进行全局匹配