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

來源:互聯網
上載者:User
關於PHP中數組模型的一點猜想(by misko lee)

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

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

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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.