我正在檢查標準PHP庫(SPL)。我之前只使用了數組,並且剛剛發現PHP有這麼多標準類。但是手冊中沒有任何文字是否建議使用它。例如,他們明確建議使用foreach
構造來迭代數組,因爲它更快。那這個圖書館呢?如果我需要在對象中存儲一些數據,我應該使用一些具體的SPL類來處理我的情況,或者使用標準數組更好嗎?PHP SPL,值得使用還是原始數組函數更好?
19
A
回答
28
有很多你的問題。你應該使用SPL數據結構嗎?這取決於。可以作爲地圖,鏈表或數組。實際上你很少需要一種數據類型作爲所有這些東西在同一時間,所以SPL數據類型的重點本質不是那麼有限。實際上,大多數「外人」(以及一些「內部人士」)會認爲PHP的陣列是一個諷刺。
PHP數組的主要缺點是它使用了大量的內存。即使你只是想要一個固定的,順序的索引數組,你也需要將東西連接在一起並存儲在鍵上。儘管如此,如果您主要追加數據並對它進行迭代,PHP的數組通常比對象類型快得多,可能是因爲函數調用會減慢速度。
一般來說,我沒有看到很多人使用SPL數據結構。大多數情況下,我認爲,因爲在PHP和Web應用程序的環境中,它們通常不太適用。您通常處理小型數組,其中內置運算符的方便性和數組函數超過了SPL類型的任何優點。
這就是說:
如果你在一個情況發現自己在那裏你使用一個數組作爲鏈表(插入/刪除在中間),然後再嘗試SPL雙向鏈表中的一個。
如果您發現自己使用大型索引數組,請嘗試使用
SPLFixedArray
。他們一定會消耗更少的內存。如果您需要將對象映射爲關鍵字,請使用
SplObjectStorage
(因爲PHP數組不能用於對象鍵)。如果你想保持數據排序在數組中,請嘗試其中一個堆。
基準本地數組對比SPL對象,並使用哪一個具有適合您的內存+速度+簡單折衷。
相關問題
- 1. 速度更快/使用更好:MySQL還是PHP md5函數?
- 2. 更好的性能:對象原型還是構造函數原生函數?
- 3. 遞歸函數更改原始數組?
- 4. PHP函數參數 - 使用數組還是不是?
- 5. Lambda函數更好還是迭代?
- 6. 複製並更新數組值更新原始數組值javascript
- 7. PHP - 使用require_once('filename.php')還是require_once'filename.php'更好?
- 8. 更改數組的值更改原始數組JavaScript
- 9. 這是html數組還是php數組?
- 10. 在這種情況下使用關聯數組還是標準數組更好?
- 11. 使用SPL ArrayObject,ArrayIterator,RecursiveArrayIterator而不是常規數組有什麼好處?
- 12. PHP:是否有更好的函數來循環多維數組
- 13. 作爲函數參數的非原始類的PHP數組
- 14. 重載CUDA shuffle函數使得原始函數不可見
- 15. JavaScript將數組傳遞給函數的值,使原始數組保持不變
- 16. 函數參數前面的PHP類型,好還是壞?
- 17. 哪些是更好的php函數?
- 18. 在Uri.TryCreate代碼執行後使用Uri.Absolute還是原始字符串更好?
- 19. 在構造函數中定義狀態還是使用屬性初始值設定項更好?
- 20. 使用MKL函數初始化C++數組是否是一個好主意?
- 21. 函數參數:IEnumerable,ICollection還是數組?
- 22. 使用STL算法,傳遞函數指針還是函子會更好嗎?
- 23. 對於數組,PHP的count()函數是O(1)還是O(n)?
- 24. JavaScript函數原型:Object,Function,還是Both?
- 25. keyreleased函數不還原原始背景顏色在java中
- 26. 使用Spl DataStructures作爲多維數組替代品的PHP
- 27. EasyHook原始函數調用
- 28. CT CAD是基於DICOM圖像數據還是原始數據?
- 29. .sort函數是否改變原始數組?
- 30. C++哪個更快,返回函數中的值,還是使用引用參數?
如果將數據存儲在對象中,則可以通過實現ArrayAccess或ArrayIterator來遍歷該對象,但底層數據仍然存儲在普通的舊PHP數組中。常規數組很好,如果你想要將數據存儲在一個對象中,可以自行決定實現[Iterators](http://www.php.net/manual/en/spl.iterators.php)中的一個。 – drew010 2012-07-07 22:31:04