PHP 的精髓就是陣列的運用,陣列玩得好可以用於所有資料結構。有個叫SPL的好東西,裡面有很多資料結構可供我們使用,效能也比我們使用陣列實現的好很多。
今天來看看SplFixedArray,顧名思義,固定大小的陣列。實例化時,指定數組大小,使用過程中不可擴充數組、縮小。
所以如果你有對數組進行動態操作時,可能就不太適合用它,而且SplFixedArray的索引只能是數字,不可以作為鍵值數組使用。
以下是測試Array和SplFixedArray的100W 次讀寫效能以及記憶體佔用
程式碼
<?php define('TEST_COUNT', 1000000); $memory = memory_get_usage(); $writeTime = microtime(true); $arr = []; for($i = 0; $i < TEST_COUNT; ++$i) { $arr[] = $i; } $writeTime = microtime(true) - $writeTime; $readTime = microtime(true); for($i = 0; $i < TEST_COUNT; ++$i) { $value = $arr[$i]; } $readTime = microtime(true) - $readTime; $memory = memory_get_usage() - $memory; echo '[Array]', PHP_EOL, 'Memory: ', $memory, ' bytes', PHP_EOL, 'Write Time: ', $writeTime, 's', PHP_EOL, 'Read Time: ', $readTime, 's', PHP_EOL; $memory = memory_get_usage(); $writeTime = microtime(true); $splFixedArray = new SplFixedArray(TEST_COUNT); for($i = 0; $i < TEST_COUNT; ++$i) { $splFixedArray[$i] = $i; } $writeTime = microtime(true) - $writeTime; $readTime = microtime(true); for($i = 0; $i < TEST_COUNT; ++$i) { $value = $splFixedArray[$i]; } $readTime = microtime(true) - $readTime; $memory = memory_get_usage() - $memory; echo '[SplFixedArray]', PHP_EOL, 'Memory: ', $memory, ' bytes', PHP_EOL, 'Write Time: ', $writeTime, 's', PHP_EOL, 'Read Time: ', $readTime, 's', PHP_EOL;
執行結果
[Array] Memory: 33558608 bytes Write Time: 0.083034038543701s Read Time: 0.022516965866089s [SplFixedArray] Memory: 16003208 bytes Write Time: 0.037343978881836s Read Time: 0.022947072982788s
結論
記憶體佔用:SplFixedArray 比Array 能節省一半多的記憶體
寫入效能:SplFixedArray 比Array 更快
讀取效能:五五開,多次測試下來Array 讀取速度甚至更快一些
如果你能確定只需要使用索引數組,並且能預測該數組的成員數,那顯然用SplFixedArray更適合一些。
以上是Array和SplFixedArray比較(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!