PHP的count(數組)和strlen(字符串)的內部實現上是直接顯示一個長度變量,還是重頭依次數一遍有多少個元素?
關乎我理解這2個函數的效率。。
希望高人能從php的c源碼上講一講。沒有源碼看過源碼知道的說說也行。
1、count執行時背后有沒有“逐個統計”子元素的個數?
2、strlen執行時背后有沒有“逐個統計”字符的個數?
==========
我已經找到PHP strlen的源碼了,唉沉下去的沒幾人。。。
正在找count的
=================
結論
strlen直接返回長度變量,沒有計算。效率O(1)
count逐個數元素,發生大量計算。效率O(N)
----------------------------------------------
count是針對數組的,返回的是數組的長度,在實現上,數組就是一張hash表,count的時候就是統計這張表的元素個數
strlen是針對字符串的,返回的是字符串的長度,也就是字符串中的字符的個數,在實現上,沒看過不清楚。
在使用上,strlen是不能用來統計數組的個數的,
雖然count可以傳入字符串作為參數,但是它返回的是相當於count((array)字符串) 也就是 1 的效果。 和strlen返回的意義就不一樣了
追問
先讀懂我的問題吧,我沒有問PHP層面的功能,功能在手冊上都寫着。問的是
1、count執行時背后有沒有逐個統計“子元素”的個數?
2、strlen執行時背后有沒有逐個統計“字符”的個數?
題意是把這2句合在一起問的。
注:
sizeof() 函數計算數組中的單元數目或對象中的屬性個數。
該函數是 count() 的別名。
百度知道上看到的
來源:
http://zhidao.baidu.com/link?url=uTqPQf48jCkbyHA_cJMcfLSiw5GQd7i6KOWqEEnwVoTWe3YlMqYWc2KLF_3cvaKCl7XmNgw2XmKhql6fJZ0zc_