国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php數組指針用法詳解

2024-09-04 11:46:19
字體:
來源:轉載
供稿:網友

先給出一條結論,然后我們在用代碼來證明這個結論吧,$arrtmp=$arr;在這個賦值表達式中我把$arr叫做賦值數組,把$arrtmp叫做被賦值數組,數組在賦值時,如果賦值數組的數組指針已經指向了數組末尾,則賦值之后賦值數組的數組指針會被重置,指向數組第一個元素,如果在賦值時,賦值數組的數組指針沒有指向數組末尾,而是指向了任何一個有效的數組元素,那么在賦值之后賦值數組的數組指針是不會被重置的,而是保留其原來指向的元素.

在賦值之后,被賦值數組不僅有了賦值數組的值,而且賦值數組的數組指針指向了那個元素,被賦值的數組也會指向自己中值相同的那個元素.

demo1實例代碼如下:

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

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

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. <?php 
  2.           $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); 
  3.           while( list($key,$value) = each($arr) ) 
  4.           { 
  5.                $$key = $value
  6.          } 
  7.          //下面這一步操作很關鍵,問題就出在這里,遍歷完之后,對數組添加一個值。 
  8.          $arr['var6'] = 6; 
  9.           
  10.         func($arr);  
  11.          
  12.        function func($arrtmp
  13.        { 
  14.               while(list($key,$value) = each($arrtmp) ) 
  15.               { 
  16.                      $$key = $value
  17.               } 
  18.               var_dump($var1); 
  19.               var_dump($var2); 
  20.               var_dump($var3); 
  21.               var_dump($var4); 
  22.               var_dump($var5); 
  23.               var_dump($var6); 
  24.        } 
  25. ?> 
  26. //輸出結果:NULL NULL NULL NULL NULL int(6). 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 名山县| 雷波县| 宝山区| 五常市| 临西县| 碌曲县| 双桥区| 新乡市| 微山县| 抚松县| 汝州市| 南阳市| 固始县| 古丈县| 渝中区| 黔西县| 嵊州市| 门头沟区| 沧源| 留坝县| 五大连池市| 余姚市| 永福县| 山东省| 宜昌市| 盐亭县| 龙海市| 彩票| 永善县| 辽阳县| 沙河市| 长汀县| 石首市| 浮梁县| 罗城| 南安市| 西昌市| 贞丰县| 乌兰察布市| 海盐县| 泰安市|