php专区

 首页 > php专区 > PHP基础 > 数组 > php数组指针用法详解 - php数组

php数组指针用法详解 - php数组

分享到:
【字体:
导读:
          先给出一条结论,然后我们在用代码来证明这个结论吧,$arrtmp=$arr;在这个赋值表达式中我把$arr叫做赋值数组,把$arrtmp叫做被赋值数组,数组在赋值时,如果赋值数组的数组指针已经指向了数组...

php数组指针用法详解

先给出一条结论,然后我们在用代码来证明这个结论吧,$arrtmp=$arr;在这个赋值表达式中我把$arr叫做赋值数组,把$arrtmp叫做被赋值数组,数组在赋值时,如果赋值数组的数组指针已经指向了数组末尾,则赋值之后赋值数组的数组指针会被重置,指向数组第一个元素,如果在赋值时,赋值数组的数组指针没有指向数组末尾,而是指向了任何一个有效的数组元素,那么在赋值之后赋值数组的数组指针是不会被重置的,而是保留其原来指向的元素.

在赋值之后,被赋值数组不仅有了赋值数组的值,而且赋值数组的数组指针指向了那个元素,被赋值的数组也会指向自己中值相同的那个元素.

demo1实例代码如下:

  1. $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); 
  2. while( list($key,$value) = each($arr) ) 
  3.     if($value == 4) break
  4. var_dump(current($arr)); 
  5.  
  6. $arr1 = $arr
  7.  
  8. var_dump(current($arr)); 
  9. var_dump(current($arr1)); 
  10. ?> 

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实例代码如下:

  1. $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); 
  2. while( list($key,$value) = each($arr) ) 
  3.     //if($value == 4) break; 
  4. var_dump(current($arr)); 
  5.  
  6. $arr1 = $arr
  7.  
  8. var_dump(current($arr)); 
  9. var_dump(current($arr1)); 
  10. ?> 

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的数组指针指向的元素.

不知道描述清楚没有,还是将工作中问题简化一下,用下面代码说明一下吧.

  1.           $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); 
  2.           while( list($key,$value) = each($arr) ) 
  3.           { 
  4.                $$key = $value
  5.          } 
  6.          //下面这一步操作很关键,问题就出在这里,遍历完之后,对数组添加一个值。 
  7.          $arr['var6'] = 6; 
  8.           
  9.         func($arr);  
  10.          
  11.        function func($arrtmp
  12.        { 
  13.               while(list($key,$value) = each($arrtmp) ) 
  14.               { 
  15.                      $$key = $value
  16.               } 
  17.               var_dump($var1); 
  18.               var_dump($var2); 
  19.               var_dump($var3); 
  20.               var_dump($var4); 
  21.               var_dump($var5); 
  22.               var_dump($var6); 
  23.        } 
  24. ?> 
  25. //输出结果:NULL NULL NULL NULL NULL int(6). 
分享到:
php中数据排序与遍历函数总结 - php数组
php中数据排序与遍历函数总结 在php中,排序方式有三种,通过索引排序、通过值排序(不保留原索引)、通过值排序(保留原索引),每种又分为升序、降序以及用户定义顺序三个函数,它们分别如下: 通过索引排序:①升序 ksort() ②降序 krsort() ③用户定义顺序 uksort() 不保留原索引值排序:①升...
php多维数组排序方法 - php数组
php多维数组排序方法 本文章详细的介绍了关于多维数组排序的方法,array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口. 先举个例子,例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……