程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 關於PHP中數組模型的一點猜想(by misko lee)

關於PHP中數組模型的一點猜想(by misko lee)

編輯:關於PHP編程

根據我個人的理解,數組在內存中應該是一片連續的空間。在數組使用前需要在內存中開辟一片規定大小的空白內存,如果聲明的大小小於可用的連續內存大小,應該報內存溢出的錯誤。
對於使用過PHP數組的童鞋應該能夠很快速的判斷出PHP中的數組並不具備以上特點。一,數組聲明無需進行size的確定;二,數組沒有使用上限。通過這兩點,我們可以判斷出,PHP中的數組是鏈表式的松散結構,而不是連續內存空間。
PHP中的數組可以分為索引數組以及關聯數組兩種形式。索引數組是一種計數型的數組結構。而關聯數組則是map數據結構的一種實現,也就是key-value的結構。
我們通過以下的例子就索引數組和關聯數組進行一些討論。
$arr=array(1,2,3,'name'=>'misko_lee','age'=>22); //定義一個索引、關聯混合型數組
for($i=0;$i<count($arr);$i++)
echo $arr[$i]; //這裡我們可以看到下標溢出的錯誤提示

Cout($arr)函數調用返回$arr數組的長度。但是for循環只能夠正常輸出索引數組。因而,我們可以判斷,索引數組與關聯數組是兩種不同的實現。因而也證明了PHP中的數組是松散型的結構的猜想。
關於索引數組我們還有以下猜想:
$arr[100]=100;
$arr[]=101; //此時$arr[]自動增長的下標為101。

上面的實驗證明了我們的猜想,PHP中的數組計數器並不是從數組內存首地址開始計數,而是一種偽計數方式。因此,利用計數器去判斷數組大小是完成錯誤的。
以上言論是個人胡言亂語,具有十分不可靠的因素。歡迎各位學長童鞋指出錯誤。好人一生平安。
最後PS一句:數組使用foreach遍歷後如果不是需求原因,請將數組指針利用reset()函數進行遍歷重置

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved