php数组指针什么用,php数组指针用法详解
先给出一条结论,然后我们在用代码来证明这个结论吧,$arrtmp=$arr;在这个赋值表达式中我把$arr叫做赋值数组,把$arrtmp叫做被赋值数组,数组在赋值时,如果赋值数组的数组指针已经指向了数组末尾,则赋值之后赋值数组的数组指针会被重置,指向数组第一个元素,如果在赋值时,赋值数组的数组指针没有指向数组末尾,而是指向了任何一个有效的数组元素,那么在赋值之后赋值数组的数组指针是不会被重置的,而是保留其原来指向的元素.
在赋值之后,被赋值数组不仅有了赋值数组的值,而且赋值数组的数组指针指向了那个元素,被赋值的数组也会指向自己中值相同的那个元素.
demo1实例代码如下:
$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);
while( list($key,$value) = each($arr) )
{
if($value== 4)break;
}
var_dump(current($arr));
$arr1=$arr;
var_dump(current($arr));
var_dump(current($arr1));
?>
demo1 的执行结果是:int(5) int(5) int(5),从这个结果可以看出,赋值前后$arr的数组指针位置没有发生任何变化,$arr1不仅值跟$arr相同,而且数组指针所指向的元素值也是相同的。现在 用上述结论来解释这个结果,在while循环中,有一个if判断语句,目的是不让$arr的数组指针指向数组末尾,而是保留在一个有效的位置,在$value=4时会跳出循环,而each这个函数会将数组指针向前移动一位,这就导致了$arr的数组指针指向了第5个元素,所以在赋值之 前,current($arr)的结果是5,赋值之后,由于在赋值之前$arr的当前指针并没有指向末尾,因此在赋值之后不会将$arr的数组指针进行重置,而是保留了其原有的位置,因此在赋值之后使用current($arr)的结果仍然是5,赋值时$arr1不仅获得了$arr的值,而且数组指针指向的元素和$arr的相同,二者都是5.
demo2实例代码如下:
$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);
while( list($key,$value) = each($arr) )
{
//if($value == 4) break;
}
var_dump(current($arr));
$arr1=$arr;
var_dump(current($arr));
var_dump(current($arr1));
?>
demo2中我们将 if($value == 4) break; 这一句注释掉了,目的很简单,就是通过each将$arr的数组指针位置指向数组末尾.
demo2 的执行结果:bool(false) int(1) bool(false),如果数组指针对应的元素为0,“”,或者不是一个有效的值时,current函数会返回false,$arr的值中没有为0或者“”的情况,因此可以断定是因为数组指针指向了一个无效的元素而导致current返回了一个false。
换句话说就是可以确定在while循环完成之后,$arr的数组指针已经指向了数组的末尾。所以我们看到在赋值之前current($arr)的值是false,而赋值之后current($arr)的值变成了1,说明赋值 之后$arr的数组指针被重置了,指向了数组的第一个元素.current($arr1)的值为false,说明赋值之后$arr1让然保留了赋值之 前$arr的数组指针指向的元素.
不知道描述清楚没有,还是将工作中问题简化一下,用下面代码说明一下吧.
$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);
while( list($key,$value) = each($arr) )
{
$$key=$value;
}
//下面这一步操作很关键,问题就出在这里,遍历完之后,对数组添加一个值。
$arr['var6'] = 6;
func($arr);
functionfunc($arrtmp)
{
while(list($key,$value) = each($arrtmp) )
{
$$key=$value;
}
var_dump($var1);
var_dump($var2);
var_dump($var3);
var_dump($var4);
var_dump($var5);
var_dump($var6);
}
?>
//输出结果:NULL NULL NULL NULL NULL int(6).
php数组指针什么用,php数组指针用法详解相关推荐
- c++智能指针用法详解
随笔 - 209 文章 - 2 评论 - 174 c++ 智能指针用法详解 本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_p ...
- js数组中foEach和map的用法详解 jq中的$.each和$.map
数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...
- this指针的用法详解
C++中this指针的用法详解 2010-11-12 20:40:45 分类: C/C++ this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.th ...
- this指针用法详解
C++中this指针的用法详解 2010-11-12 20:40:45 分类: C/C++ 1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 ...
- php 合并数组对象,JS内数组合并方法与对象合并实现步骤详解
这次给大家带来JS内数组合并方法与对象合并实现步骤详解,JS内数组合并方法与对象合并实现的注意事项有哪些,下面就是实战案例,一起来看一下. 1 数组合并 1.1 concat 方法var a=[1,2 ...
- Python中数组切片的用法详解
Python中数组切片的用法详解 一.python中"::-1"代表什么? 二.python中":"的用法 三.python中数组切片 三.numpy中的整数数 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
- 指针详讲(一阶指针和二阶指针等指针各种用法详解)
首先,大家好,我是大家的超级无敌帅的代码老师. 给大家分享一段话: "登顶之路注定坎坷: 哈哈哈哈,不管是学习还是生活,咱们得去看看山顶的风景啊!" 话不多说,咱们开干! 一:指针 ...
- 【转】C++中this指针的用法详解
1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...
最新文章
- 高斯回归过程应用例子
- java 线程池 初始大小,Java线程池ThreadPoolExecutor的实现和参数
- 边缘计算:5G 时代的万亿市场
- linux用户变量设置位置,linux---位置参数
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
- STM32PB2(BOOT1)使用注意
- 转答寒冬的面试题(1)
- 解决GetManifestResourceNames()无法读取资源文件
- 马云:未来无工可打,人工智能发展红利还在10年以后
- 矩阵快速幂各类题型总结(一般,共轭,1 * n, 矩阵简化)
- Kafka分区原理图
- 基于Geoserver配置多图层地图以及利用uDig来进行样式配置
- 如何生成密钥文件Snk
- For A, B such that AB is square, prove trAB = trBA.
- qt webview 忽略 ssl错误 ignoreSslErrors
- Graphics2D 详细应用秘籍
- java后台将数据导出到Excel表格
- 手机服务器 微信QQ,玩家天价买服务器语聊开黑 小白没想明白:微信QQ难道不行?...
- HMAC-SHA1加密算法c++与java的实现
- java 新功能_最新的Java版本101有什么新功能?